commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

BufferedReader fix


From: Guilhem Lavaux
Subject: BufferedReader fix
Date: Sat, 27 Dec 2003 14:11:19 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007

Hi,

I've checked in only one of the two patch to BufferedReader as I can't figure out what was wrong with the other one. This patch make readLine()
really block on all input readers.

Guilhem.
Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.1721
diff -u -r1.1721 ChangeLog
--- ChangeLog   27 Dec 2003 12:58:35 -0000      1.1721
+++ ChangeLog   27 Dec 2003 13:05:23 -0000
@@ -1,3 +1,8 @@
+2003-12-27  Guilhem Lavaux <address@hidden>
+
+       * java/io/BufferedReader (readLine): Make readLine() really block
+       until either EOF is reached or a true error happens.
+
 2003-12-27  Michael Koch  <address@hidden>
 
        * gnu/java/net/protocol/http/Connection.java
Index: java/io/BufferedReader.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/io/BufferedReader.java,v
retrieving revision 1.20
diff -u -r1.20 BufferedReader.java
--- java/io/BufferedReader.java 26 Dec 2003 12:15:51 -0000      1.20
+++ java/io/BufferedReader.java 27 Dec 2003 13:05:24 -0000
@@ -460,12 +460,19 @@
     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,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]