public int read(byte b[], int off, int len) throws SmbException { if (len <= 0) { return 0; } long start = fp; // ensure file is open if (file.isOpen() == false) { file.open(openFlags, 0, SmbFile.ATTR_NORMAL, options); } int r, n; SmbComReadAndXResponse response = new SmbComReadAndXResponse(b, off); do { r = len > readSize ? readSize : len; file.send(new SmbComReadAndX(file.fid, fp, r, null), response); if ((n = response.dataLength) <= 0) { return (int) ((fp - start) > 0L ? fp - start : -1); } fp += n; len -= n; response.off += n; } while (len > 0 && n == r); return (int) (fp - start); }
/** * Reads up to len bytes of data from this input stream into an array of bytes. * * @throws IOException if a network error occurs */ public int read(byte[] b, int off, int len) throws IOException { if (len <= 0) { return 0; } long start = fp; if (tmp == null) { throw new IOException("Bad file descriptor"); } // ensure file is open file.open(openFlags, SmbFile.ATTR_NORMAL, 0); /* * Read AndX Request / Response */ if (file.log.level > 2) file.log.println("read: fid=" + file.fid + ",off=" + off + ",len=" + len); SmbComReadAndXResponse response = new SmbComReadAndXResponse(b, off); if (file.type == SmbFile.TYPE_NAMED_PIPE) { response.responseTimeout = 0; } int r, n; do { r = len > readSize ? readSize : len; if (file.log.level > 2) file.log.println("read: len=" + len + ",r=" + r + ",fp=" + fp); try { file.send(new SmbComReadAndX(file.fid, fp, r, null), response); } catch (SmbException se) { if (file.type == SmbFile.TYPE_NAMED_PIPE && se.getNtStatus() == NtStatus.NT_STATUS_PIPE_BROKEN) { return -1; } throw se; } if ((n = response.dataLength) <= 0) { return (int) ((fp - start) > 0L ? fp - start : -1); } fp += n; len -= n; response.off += n; } while (len > 0 && n == r); return (int) (fp - start); }