Commit 1f94e1d8 by Francois-Xavier Coudert Committed by Jerry DeLisle

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
parent 9a832b6f
2007-10-18 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> 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 PR libfortran/32021
* runtime/backtrace.c (local_strcasestr): Protect by appropriate * runtime/backtrace.c (local_strcasestr): Protect by appropriate
......
...@@ -1411,10 +1411,16 @@ input_stream (void) ...@@ -1411,10 +1411,16 @@ input_stream (void)
stream * stream *
output_stream (void) output_stream (void)
{ {
stream * s;
#if defined(HAVE_CRLF) && defined(HAVE_SETMODE) #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
setmode (STDOUT_FILENO, O_BINARY); setmode (STDOUT_FILENO, O_BINARY);
#endif #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) ...@@ -1424,10 +1430,16 @@ output_stream (void)
stream * stream *
error_stream (void) error_stream (void)
{ {
stream * s;
#if defined(HAVE_CRLF) && defined(HAVE_SETMODE) #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
setmode (STDERR_FILENO, O_BINARY); setmode (STDERR_FILENO, O_BINARY);
#endif #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;
} }
......
...@@ -349,7 +349,7 @@ typedef struct ...@@ -349,7 +349,7 @@ typedef struct
int separator_len; int separator_len;
const char *separator; const char *separator;
int use_stderr, all_unbuffered, default_recl; int use_stderr, all_unbuffered, unbuffered_preconnected, default_recl;
int fpe, dump_core, backtrace; int fpe, dump_core, backtrace;
} }
options_t; options_t;
......
...@@ -299,6 +299,10 @@ static variable variable_table[] = { ...@@ -299,6 +299,10 @@ static variable variable_table[] = {
"If TRUE, all output is unbuffered. This will slow down large writes " "If TRUE, all output is unbuffered. This will slow down large writes "
"but can be\nuseful for forcing data to be displayed immediately.", 0}, "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, {"GFORTRAN_SHOW_LOCUS", 1, &options.locus, init_boolean, show_boolean,
"If TRUE, print filename and line number where runtime errors happen.", 0}, "If TRUE, print filename and line number where runtime errors happen.", 0},
...@@ -346,32 +350,6 @@ init_variables (void) ...@@ -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 void
show_variables (void) show_variables (void)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment