aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/io/unix.c16
-rw-r--r--libgfortran/libgfortran.h2
-rw-r--r--libgfortran/runtime/environ.c30
4 files changed, 30 insertions, 29 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6dcc055..a5415a0 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 9b61507..93484ea 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -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;
}
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index 8d80998..a30ab19 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -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;
diff --git a/libgfortran/runtime/environ.c b/libgfortran/runtime/environ.c
index a7ee3a7..ba8283e 100644
--- a/libgfortran/runtime/environ.c
+++ b/libgfortran/runtime/environ.c
@@ -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)
{