aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@waitaki.otago.ac.nz>2002-03-25 02:28:22 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2002-03-25 02:28:22 +0000
commit8cf29a474f8d1a6555362022ebb0b8a047ee4666 (patch)
treec3e7066f8f9ad0c5621e3f1f8b8d25626ab67205 /libjava/java/io
parentacf9549ef9151cce8c62cf02c9a07809693a4891 (diff)
downloadgcc-8cf29a474f8d1a6555362022ebb0b8a047ee4666.zip
gcc-8cf29a474f8d1a6555362022ebb0b8a047ee4666.tar.gz
gcc-8cf29a474f8d1a6555362022ebb0b8a047ee4666.tar.bz2
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. From-SVN: r51296
Diffstat (limited to 'libjava/java/io')
-rw-r--r--libjava/java/io/PushbackInputStream.java19
1 files changed, 12 insertions, 7 deletions
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;
}
/**