OSDN Git Service

2007-10-18 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Oct 2007 04:10:58 +0000 (04:10 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Oct 2007 04:10:58 +0000 (04:10 +0000)
    Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/33795
* libgfortran.h: Add unbuffered_preconnected.
* io/unix.c (output_stream): Set stream unbuffered flag if
options.unbuffered_preconnected has been set.
(error_stream): Ditto.
* runtime/environ.c (variable_table): Add to environment variable table
the entry: GFORTRAN_UNBUFFERED_PRECONNECTED.

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

libgfortran/ChangeLog
libgfortran/io/unix.c
libgfortran/libgfortran.h
libgfortran/runtime/environ.c

index 6dcc055..a5415a0 100644 (file)
@@ -1,4 +1,15 @@
 2007-10-18  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+           Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/33795
+       * libgfortran.h: Add unbuffered_preconnected.
+       * io/unix.c (output_stream): Set stream unbuffered flag if
+       options.unbuffered_preconnected has been set.
+       (error_stream): Ditto.
+       * runtime/environ.c (variable_table): Add to environment variable table
+       the entry: GFORTRAN_UNBUFFERED_PRECONNECTED. 
+       
+2007-10-18  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR libfortran/32021
        * runtime/backtrace.c (local_strcasestr): Protect by appropriate
index 9b61507..93484ea 100644 (file)
@@ -1411,10 +1411,16 @@ input_stream (void)
 stream *
 output_stream (void)
 {
+  stream * s;
+
 #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
   setmode (STDOUT_FILENO, O_BINARY);
 #endif
-  return fd_to_stream (STDOUT_FILENO, PROT_WRITE);
+
+  s = fd_to_stream (STDOUT_FILENO, PROT_WRITE);
+  if (options.unbuffered_preconnected)
+    ((unix_stream *) s)->unbuffered = 1;
+  return s;
 }
 
 
@@ -1424,10 +1430,16 @@ output_stream (void)
 stream *
 error_stream (void)
 {
+  stream * s;
+
 #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
   setmode (STDERR_FILENO, O_BINARY);
 #endif
-  return fd_to_stream (STDERR_FILENO, PROT_WRITE);
+
+  s = fd_to_stream (STDERR_FILENO, PROT_WRITE);
+  if (options.unbuffered_preconnected)
+    ((unix_stream *) s)->unbuffered = 1;
+  return s;
 }
 
 
index 8d80998..a30ab19 100644 (file)
@@ -349,7 +349,7 @@ typedef struct
   int separator_len;
   const char *separator;
 
-  int use_stderr, all_unbuffered, default_recl;
+  int use_stderr, all_unbuffered, unbuffered_preconnected, default_recl;
   int fpe, dump_core, backtrace;
 }
 options_t;
index a7ee3a7..ba8283e 100644 (file)
@@ -299,6 +299,10 @@ static variable variable_table[] = {
    "If TRUE, all output is unbuffered.  This will slow down large writes "
    "but can be\nuseful for forcing data to be displayed immediately.", 0},
 
+  {"GFORTRAN_UNBUFFERED_PRECONNECTED", 0, &options.unbuffered_preconnected,
+   init_boolean, show_boolean,
+   "If TRUE, output to preconnected units is unbuffered.", 0},
+
   {"GFORTRAN_SHOW_LOCUS", 1, &options.locus, init_boolean, show_boolean,
    "If TRUE, print filename and line number where runtime errors happen.", 0},
 
@@ -346,32 +350,6 @@ init_variables (void)
 }
 
 
-/* check_buffered()-- Given an unit number n, determine if an override
- * for the stream exists.  Returns zero for unbuffered, one for
- * buffered or two for not set. */
-
-int
-check_buffered (int n)
-{
-  char name[22 + sizeof (n) * 3];
-  variable v;
-  int rv;
-
-  if (options.all_unbuffered)
-    return 0;
-
-  sprintf (name, "GFORTRAN_UNBUFFERED_%d", n);
-
-  v.name = name;
-  v.value = 2;
-  v.var = &rv;
-
-  init_boolean (&v);
-
-  return rv;
-}
-
-
 void
 show_variables (void)
 {