aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit
diff options
context:
space:
mode:
authorIan Wetherbee <wetherbeei@google.com>2012-06-07 16:22:53 -0700
committerShawn O. Pearce <spearce@spearce.org>2012-06-14 22:23:48 -0700
commit590e8f44e624a97ad0180db7f309eb9a448bf60d (patch)
tree09cd40459d43f796e0a8a0f60bb50ba40599cbab /org.eclipse.jgit/src/org/eclipse/jgit
parent90003519092c4be2f7806b171cd1c2d37a05f588 (diff)
downloadjgit-590e8f44e624a97ad0180db7f309eb9a448bf60d.tar.gz
jgit-590e8f44e624a97ad0180db7f309eb9a448bf60d.zip
Fix UnionInputStream.read to be more Java-like
Relax the read() method to not block until exactly "len" bytes have been read. Instead, return when one or more bytes have been read, up to "len", so UnionInputStream more closely resembles InputStream's read() method. Change-Id: I3f632be8eb85a4a0baf27c9f067c8d817162de2b
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/io/UnionInputStream.java21
1 files changed, 8 insertions, 13 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/UnionInputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/UnionInputStream.java
index 0df3775f11..20dcd4659e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/UnionInputStream.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/UnionInputStream.java
@@ -138,23 +138,18 @@ public class UnionInputStream extends InputStream {
@Override
public int read(byte[] b, int off, int len) throws IOException {
- int cnt = 0;
- while (0 < len) {
+ if (len == 0)
+ return 0;
+ for (;;) {
final InputStream in = head();
final int n = in.read(b, off, len);
- if (0 < n) {
- cnt += n;
- off += n;
- len -= n;
- } else if (in == EOF)
- return 0 < cnt ? cnt : -1;
- else {
+ if (0 < n)
+ return n;
+ else if (in == EOF)
+ return -1;
+ else
pop();
- if (0 < cnt)
- break;
- }
}
- return cnt;
}
@Override