diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 1ada88c0a36..d790e60fbd9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2003-08-10 Bryce McKinlay + + * java/io/PrintStream.java (print): Always flush if auto_flush is + set. Don't check for newline characters. + (write (int)): Implement without using a temporary array. + (write (byte[], int, int): Always flush if auto_flush is set. Don't + check for newline characters. + Fixes PR libgcj/11778. + 2003-08-08 Andrew Haley * Makefile.am (AM_CXXFLAGS): Define BOOT_CLASS_PATH. diff --git a/libjava/java/io/PrintStream.java b/libjava/java/io/PrintStream.java index 83668523ab8..d2a211744e2 100644 --- a/libjava/java/io/PrintStream.java +++ b/libjava/java/io/PrintStream.java @@ -95,7 +95,9 @@ public class PrintStream extends FilterOutputStream * This method intializes a new PrintStream object to write * to the specified output sink. This constructor also allows "auto-flush" * functionality to be specified where the stream will be flushed after - * every line is terminated or newline character is written. + * every print or println call, when the + * write methods with array arguments are called, or when a + * single new-line character is written. *

* * @param out The OutputStream to write to. @@ -114,7 +116,9 @@ public class PrintStream extends FilterOutputStream * This method intializes a new PrintStream object to write * to the specified output sink. This constructor also allows "auto-flush" * functionality to be specified where the stream will be flushed after - * every line is terminated or newline character is written. + * every print or println call, when the + * write methods with array arguments are called, or when a + * single new-line character is written. *

* * @param out The OutputStream to write to. @@ -256,10 +260,8 @@ public class PrintStream extends FilterOutputStream { pw.print (str); - if (str != null && auto_flush) - if ((str.indexOf ('\r') != -1) - || (str.indexOf ('\n') != -1)) - flush (); + if (auto_flush) + flush (); } /** @@ -422,9 +424,21 @@ public class PrintStream extends FilterOutputStream */ public void write (int oneByte) { - byte[] data = new byte [1]; - data [0] = (byte) (oneByte & 0xff); - write (data, 0, 1); + // We actually have to implement this method. Flush first so that + // things get written in the right order. + flush(); + + try + { + out.write (oneByte & 0xff); + + if (auto_flush && (oneByte == '\n')) + flush (); + } + catch (IOException e) + { + setError (); + } } /** @@ -446,19 +460,12 @@ public class PrintStream extends FilterOutputStream out.write (buffer, offset, len); if (auto_flush) - for (int i = offset; i < len; i++) - if ((buffer [i] == '\r') - || (buffer [i] == '\n')) - { - flush (); - break; - } + flush (); } catch (IOException e) { setError (); } } - } // class PrintStream