From 8cf29a474f8d1a6555362022ebb0b8a047ee4666 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Mon, 25 Mar 2002 02:28:22 +0000 Subject: [PATCH] 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 --- libjava/ChangeLog | 6 ++++++ libjava/java/io/PushbackInputStream.java | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0b15ae640a6..1f8e835c781 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 diff --git a/libjava/java/io/PushbackInputStream.java b/libjava/java/io/PushbackInputStream.java index 7afd3d5e5cd..ebf0e38616a 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; } /**