OSDN Git Service

2003-12-28 Guilhem Lavaux <guilhem@kaffe.org>
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Dec 2003 11:54:17 +0000 (11:54 +0000)
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Dec 2003 11:54:17 +0000 (11:54 +0000)
* java/io/LineNumberReader.java
(mark): Improved error checking.
(read): Likewise.
(skip): Likewise. Skip is now really eating the specified number of
characters.
* java/io/CharArrayReader.java (read): It should throw
IndexOutOfBoundsException and not ArrayIndexOutOfBoundsException (see
mauve).
* java/io/BufferedReader.java (readLine): Make readLine() really block
until either EOF is reached or a true error happens.

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

libjava/ChangeLog
libjava/java/io/BufferedReader.java
libjava/java/io/CharArrayReader.java
libjava/java/io/LineNumberReader.java

index a657e5a..493c3bb 100644 (file)
@@ -1,3 +1,16 @@
+2003-12-28  Guilhem Lavaux <guilhem@kaffe.org>
+
+       * java/io/LineNumberReader.java
+       (mark): Improved error checking.
+       (read): Likewise.
+       (skip): Likewise. Skip is now really eating the specified number of
+       characters.
+       * java/io/CharArrayReader.java (read): It should throw
+       IndexOutOfBoundsException and not ArrayIndexOutOfBoundsException (see
+       mauve).
+       * java/io/BufferedReader.java (readLine): Make readLine() really block
+       until either EOF is reached or a true error happens.
+
 2003-12-27  Michael Koch  <konqueror@gmx.de>
 
        * gnu/java/net/protocol/http/Connection.java
index 73fb47c..e29c8dd 100644 (file)
@@ -460,12 +460,19 @@ public class BufferedReader extends Reader
     boolean eof = false;
     for (;;)
       {
-       int ch = read();
-       if (ch < 0)
+       // readLine should block. So we must not return until a -1 is reached.
+       if (pos >= limit)
          {
-           eof = true;
-           break;
+           // here count == 0 isn't sufficient to give a failure.
+           int count = fill();
+           if (count < 0)
+             {
+               eof = true;
+               break;
+             }
+           continue;
          }
+       int ch = buffer[pos++];
        if (ch == '\n' || ch == '\r')
          {
            // Check here if a '\r' was the last char in the buffer; if so,
index f379519..9d5382b 100644 (file)
@@ -228,7 +228,7 @@ public class CharArrayReader extends Reader
 
        /* Don't need to check pos value, arraycopy will check it. */
        if (off < 0 || len < 0 || off + len > b.length)
-         throw new ArrayIndexOutOfBoundsException();
+         throw new IndexOutOfBoundsException();
 
        if (pos >= count)
          return -1;
index 9c4796d..439a760 100644 (file)
@@ -155,6 +155,9 @@ public class LineNumberReader extends BufferedReader
     */
   public void mark(int readLimit) throws IOException
   {
+    if (readLimit < 0)
+      throw new IllegalArgumentException("Read-ahead limit is negative");
+
     synchronized (lock)
       {
        // This is basically the same as BufferedReader.mark.
@@ -265,9 +268,17 @@ public class LineNumberReader extends BufferedReader
     * @return The actual number of chars read, or -1 if end of stream
     *
     * @exception IOException If an error occurs.
+    * @exception NullPointerException If buf is null (in any case).
+    * @exception IndexOutOfBoundsException If buffer parameters (offset and
+    * count) lies outside of the buffer capacity.
     */
   public int read(char[] buf, int offset, int count) throws IOException
   {
+    if (buf == null)
+      throw new NullPointerException();
+    if (offset + count > buf.length || offset < 0)
+      throw new IndexOutOfBoundsException();
+
     if (count <= 0)
       {
        if (count < 0)
@@ -376,14 +387,17 @@ public class LineNumberReader extends BufferedReader
     */
   public long skip (long count) throws IOException
   {
-    if (count <= 0)
+    if (count < 0)
+      throw new IllegalArgumentException("skip() value is negative");
+    if (count == 0)
       return 0;
 
     int skipped;
-    
+    char[] buf = new char[1];
+   
     for (skipped = 0; skipped < count; skipped++)
       {
-        int ch = read();
+        int ch = read(buf, 0, 1);
 
         if (ch < 0)
           break;