[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: io fixlet
Kaffe CVS
cvs-commits at kaffe.org
Wed Mar 9 02:41:35 PST 2005
PatchSet 5506
Date: 2005/03/09 10:36:41
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU Classpath: io fixlet
2005-03-09 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
2005-03-07 Jeroen Frijters <jeroen at frijters.net>
* java/io/DataInputStream.java (ignoreInitialNewline): Removed
(readLine): Changed newline handling.
Members:
ChangeLog:1.3680->1.3681
libraries/javalib/java/io/DataInputStream.java:1.23->1.24
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3680 kaffe/ChangeLog:1.3681
--- kaffe/ChangeLog:1.3680 Tue Mar 8 22:40:36 2005
+++ kaffe/ChangeLog Wed Mar 9 10:36:41 2005
@@ -1,3 +1,12 @@
+2005-03-09 Dalibor Topic <robilad at kaffe.org>
+
+ Resynced with GNU Classpath.
+
+ 2005-03-07 Jeroen Frijters <jeroen at frijters.net>
+
+ * java/io/DataInputStream.java (ignoreInitialNewline): Removed
+ (readLine): Changed newline handling.
+
2005-03-08 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
Index: kaffe/libraries/javalib/java/io/DataInputStream.java
diff -u kaffe/libraries/javalib/java/io/DataInputStream.java:1.23 kaffe/libraries/javalib/java/io/DataInputStream.java:1.24
--- kaffe/libraries/javalib/java/io/DataInputStream.java:1.23 Sat Feb 19 15:04:14 2005
+++ kaffe/libraries/javalib/java/io/DataInputStream.java Wed Mar 9 10:36:45 2005
@@ -1,5 +1,5 @@
/* DataInputStream.java -- FilteredInputStream that implements DataInput
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation
+ Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation
This file is part of GNU Classpath.
@@ -56,11 +56,6 @@
*/
public class DataInputStream extends FilterInputStream implements DataInput
{
- // readLine() hack to ensure that an '\r' not followed by an '\n' is
- // handled correctly. If set, readLine() will ignore the first char it sees
- // if that char is a '\n'
- boolean ignoreInitialNewline = false;
-
// Byte buffer, used to make primitive read calls more efficient.
byte[] buf = new byte [8];
@@ -352,88 +347,29 @@
*
* @deprecated
*/
- public final String readLine () throws IOException
+ public final String readLine() throws IOException
{
- StringBuffer strb = new StringBuffer ();
+ StringBuffer strb = new StringBuffer();
- readloop: while (true)
+ while (true)
{
- int c = 0;
- char ch = ' ';
- boolean getnext = true;
- while (getnext)
- {
- getnext = false;
- c = in.read();
- if (c < 0) // got an EOF
- return strb.length () > 0 ? strb.toString () : null;
- ch = (char) c;
- if ((ch &= 0xFF) == '\n')
- // hack to correctly handle '\r\n' sequences
- if (ignoreInitialNewline)
- {
- ignoreInitialNewline = false;
- getnext = true;
- }
- else
- break readloop;
- }
-
- if (ch == '\r')
+ int c = in.read();
+ if (c == -1) // got an EOF
+ return strb.length() > 0 ? strb.toString() : null;
+ if (c == '\r')
{
- // FIXME: The following code tries to adjust the stream back one
- // character if the next char read is '\n'. As a last resort,
- // it tries to mark the position before reading but the bottom
- // line is that it is possible that this method will not properly
- // deal with a '\r' '\n' combination thus not fulfilling the
- // DataInput contract for readLine. It's not a particularly
- // safe approach threadwise since it is unsynchronized and
- // since it might mark an input stream behind the users back.
- // Along the same vein it could try the same thing for
- // ByteArrayInputStream and PushbackInputStream, but that is
- // probably overkill since this is deprecated & BufferedInputStream
- // is the most likely type of input stream.
- //
- // The alternative is to somehow push back the next byte if it
- // isn't a '\n' or to have the reading methods of this class
- // keep track of whether the last byte read was '\r' by readLine
- // and then skip the very next byte if it is '\n'. Either way,
- // this would increase the complexity of the non-deprecated methods
- // and since it is undesirable to make non-deprecated methods
- // less efficient, the following seems like the most reasonable
- // approach.
- int next_c = 0;
- char next_ch = ' ';
- if (in instanceof BufferedInputStream)
- {
- next_c = in.read();
- next_ch = (char) (next_c & 0xFF);
- if ((next_ch != '\n') && (next_c >= 0))
- {
- BufferedInputStream bin = (BufferedInputStream) in;
- if (bin.pos > 0)
- bin.pos--;
- }
- }
- else if (markSupported())
- {
- next_c = in.read();
- next_ch = (char) (next_c & 0xFF);
- if ((next_ch != '\n') && (next_c >= 0))
- {
- mark(1);
- if ((in.read() & 0xFF) != '\n')
- reset();
- }
- }
- // In order to catch cases where 'in' isn't a BufferedInputStream
- // and doesn't support mark() (such as reading from a Socket), set
- // a flag that instructs readLine() to ignore the first character
- // it sees _if_ that character is a '\n'.
- else ignoreInitialNewline = true;
- break;
+ int next_c = in.read();
+ if (next_c != '\n' && next_c != -1)
+ {
+ if (! (in instanceof PushbackInputStream))
+ in = new PushbackInputStream(in);
+ ((PushbackInputStream) in).unread(next_c);
+ }
+ break;
}
- strb.append(ch);
+ if (c == '\n')
+ break;
+ strb.append((char) c);
}
return strb.length() > 0 ? strb.toString() : "";
More information about the kaffe
mailing list