diff options
author | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2007-10-19 04:10:58 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-10-19 04:10:58 +0000 |
commit | 1f94e1d88efeb405a810a72ad61ab637becb3761 (patch) | |
tree | e8f95541146ff846daf5d9ce7654cb1a96a92a80 /libgfortran | |
parent | 9a832b6f869f95dea2cc2c4840f6d66ef725d9f6 (diff) | |
download | gcc-1f94e1d88efeb405a810a72ad61ab637becb3761.zip gcc-1f94e1d88efeb405a810a72ad61ab637becb3761.tar.gz gcc-1f94e1d88efeb405a810a72ad61ab637becb3761.tar.bz2 |
re PR fortran/33795 (Environment variable GFORTRAN_UNBUFFERED_<number> not working)
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.
Co-Authored-By: Jerry DeLisle <jvdelisle@gcc.gnu.org>
From-SVN: r129470
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 11 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 16 | ||||
-rw-r--r-- | libgfortran/libgfortran.h | 2 | ||||
-rw-r--r-- | libgfortran/runtime/environ.c | 30 |
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) { |