aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/java/io/PushbackInputStream.java19
2 files changed, 18 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 0b15ae6..1f8e835 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -4,6 +4,12 @@
* java/io/FileInputStream.java (skip): Call fd.getFilePointer() and
calculate correct number of bytes skipped.
+
+ Based on patch from Intel's ORP team:
+ * java/io/PushbackInputStream.java (available): Calculate correct
+ number of bytes in buffer.
+ (read): Remove redundant bound check. Return bytes from both the
+ buffer and the stream.
2002-03-24 Tom Tromey <tromey@redhat.com>
diff --git a/libjava/java/io/PushbackInputStream.java b/libjava/java/io/PushbackInputStream.java
index 7afd3d5..ebf0e38 100644
--- a/libjava/java/io/PushbackInputStream.java
+++ b/libjava/java/io/PushbackInputStream.java
@@ -1,5 +1,5 @@
/* PushbackInputStream.java -- An input stream that can unread bytes
- Copyright (C) 1998, 1999, 2001, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -116,7 +116,7 @@ public class PushbackInputStream extends FilterInputStream
*/
public int available() throws IOException
{
- return pos + super.available();
+ return (buf.length - pos) + super.available();
}
/**
@@ -200,18 +200,23 @@ public class PushbackInputStream extends FilterInputStream
*/
public synchronized int read(byte[] b, int off, int len) throws IOException
{
- if (off < 0 || len < 0 || off + len > b.length)
- throw new ArrayIndexOutOfBoundsException();
-
int numBytes = Math.min(buf.length - pos, len);
if (numBytes > 0)
{
System.arraycopy (buf, pos, b, off, numBytes);
pos += numBytes;
- return numBytes;
+ len -= numBytes;
+ off += numBytes;
}
- return super.read(b, off, len);
+ if (len > 0)
+ {
+ len = super.read(b, off, len);
+ if (len == -1) // EOF
+ return numBytes > 0 ? numBytes : -1;
+ numBytes += len;
+ }
+ return numBytes;
}
/**