Based on patch from Intel's ORP team:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Mar 2002 02:28:22 +0000 (02:28 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Mar 2002 02:28:22 +0000 (02:28 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51296 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/io/PushbackInputStream.java

index 0b15ae6..1f8e835 100644 (file)
@@ -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>
 
index 7afd3d5..ebf0e38 100644 (file)
@@ -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;
   }
 
   /**