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
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;
}
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;
}
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;
"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},
}
-/* 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)
{