]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libgcj/11778 (System.out PrintStream does too much buffering)
authorBryce McKinlay <bryce@mckinlay.net.nz>
Sun, 10 Aug 2003 02:53:17 +0000 (02:53 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Sun, 10 Aug 2003 02:53:17 +0000 (03:53 +0100)
* 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.

From-SVN: r70284

libjava/ChangeLog
libjava/java/io/PrintStream.java

index 1ada88c0a362f170f861cc0531f4c339003629af..d790e60fbd955596d0bfd28641c93227f8ad52b9 100644 (file)
@@ -1,3 +1,12 @@
+2003-08-10  Bryce McKinlay  <bryce@mckinlay.net.nz>
+
+       * 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  <aph@redhat.com>
 
        * Makefile.am (AM_CXXFLAGS): Define BOOT_CLASS_PATH.
index 83668523ab86f932e1015cf461032c7c38d650b8..d2a211744e2f0eea110b04f3c4e861d2135636d7 100644 (file)
@@ -95,7 +95,9 @@ public class PrintStream extends FilterOutputStream
    * This method intializes a new <code>PrintStream</code> 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 <code>print</code> or <code>println</code> call, when the 
+   * <code>write</code> methods with array arguments are called, or when a 
+   * single new-line character is written.
    * <p>
    *
    * @param out The <code>OutputStream</code> to write to.
@@ -114,7 +116,9 @@ public class PrintStream extends FilterOutputStream
    * This method intializes a new <code>PrintStream</code> 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 <code>print</code> or <code>println</code> call, when the 
+   * <code>write</code> methods with array arguments are called, or when a 
+   * single new-line character is written.
    * <p>
    *
    * @param out The <code>OutputStream</code> 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