mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 02:04:50 +08:00
re PR libfortran/19052 (unit 0 not preconnected to standard error)
PR libgfortran/19052 * libgfortran.h (options_t): Add stderr_unit. * io/io.h (error_stream): Declare. * io/open.c (new_unit): Do not terminate abnormally if opening file preconnected to stdin, stdout, or stderr. * io/unit.c (init_units): Initialize stderr_unit. * io/unix.c (error_stream): New function. * runtime/environ.c (GFORTRAN_STDERR_UNIT): New environment variable. From-SVN: r94090
This commit is contained in:
parent
a059cdb863
commit
fbac336391
@ -1,3 +1,14 @@
|
||||
2005-01-22 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
PR libgfortran/19052
|
||||
* libgfortran.h (options_t): Add stderr_unit.
|
||||
* io/io.h (error_stream): Declare.
|
||||
* io/open.c (new_unit): Do not terminate abnormally if opening
|
||||
file preconnected to stdin, stdout, or stderr.
|
||||
* io/unit.c (init_units): Initialize stderr_unit.
|
||||
* io/unix.c (error_stream): New function.
|
||||
* runtime/environ.c (GFORTRAN_STDERR_UNIT): New environment variable.
|
||||
|
||||
2005-01-22 Thomas Koenig <Thomas.Koenig@online.de>
|
||||
|
||||
PR libfortran/18982
|
||||
|
@ -395,6 +395,9 @@ internal_proto(input_stream);
|
||||
extern stream *output_stream (void);
|
||||
internal_proto(output_stream);
|
||||
|
||||
extern stream *error_stream (void);
|
||||
internal_proto(error_stream);
|
||||
|
||||
extern int compare_file_filename (stream *, const char *, int);
|
||||
internal_proto(compare_file_filename);
|
||||
|
||||
|
@ -323,9 +323,14 @@ new_unit (unit_flags * flags)
|
||||
internal_error ("new_unit(): Bad status");
|
||||
}
|
||||
|
||||
/* Make sure the file isn't already open someplace else. */
|
||||
/* Make sure the file isn't already open someplace else.
|
||||
Do not error if opening file preconnected to stdin, stdout, stderr. */
|
||||
|
||||
if (find_file () != NULL)
|
||||
u = find_file ();
|
||||
if (u != NULL
|
||||
&& (options.stdin_unit < 0 || u->unit_number != options.stdin_unit)
|
||||
&& (options.stdout_unit < 0 || u->unit_number != options.stdout_unit)
|
||||
&& (options.stderr_unit < 0 || u->unit_number != options.stderr_unit))
|
||||
{
|
||||
generate_error (ERROR_ALREADY_OPEN, NULL);
|
||||
goto cleanup;
|
||||
|
@ -334,6 +334,27 @@ init_units (void)
|
||||
insert_unit (u);
|
||||
}
|
||||
|
||||
if (options.stderr_unit >= 0)
|
||||
{ /* STDERR */
|
||||
u = get_mem (sizeof (gfc_unit));
|
||||
|
||||
u->unit_number = options.stderr_unit;
|
||||
u->s = error_stream ();
|
||||
|
||||
u->flags.action = ACTION_WRITE;
|
||||
|
||||
u->flags.access = ACCESS_SEQUENTIAL;
|
||||
u->flags.form = FORM_FORMATTED;
|
||||
u->flags.status = STATUS_OLD;
|
||||
u->flags.blank = BLANK_ZERO;
|
||||
u->flags.position = POSITION_ASIS;
|
||||
|
||||
u->recl = options.default_recl;
|
||||
u->endfile = AT_ENDFILE;
|
||||
|
||||
insert_unit (u);
|
||||
}
|
||||
|
||||
/* Calculate the maximum file offset in a portable manner.
|
||||
* max will be the largest signed number for the type gfc_offset.
|
||||
*
|
||||
|
@ -1160,7 +1160,7 @@ input_stream (void)
|
||||
}
|
||||
|
||||
|
||||
/* output_stream()-- Return a stream pointer to the default input stream.
|
||||
/* output_stream()-- Return a stream pointer to the default output stream.
|
||||
* Called on initialization. */
|
||||
|
||||
stream *
|
||||
@ -1170,6 +1170,15 @@ output_stream (void)
|
||||
}
|
||||
|
||||
|
||||
/* error_stream()-- Return a stream pointer to the default error stream.
|
||||
* Called on initialization. */
|
||||
|
||||
stream *
|
||||
error_stream (void)
|
||||
{
|
||||
return fd_to_stream (STDERR_FILENO, PROT_WRITE);
|
||||
}
|
||||
|
||||
/* init_error_stream()-- Return a pointer to the error stream. This
|
||||
* subroutine is called when the stream is needed, rather than at
|
||||
* initialization. We want to work even if memory has been seriously
|
||||
|
@ -292,7 +292,7 @@ enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int stdin_unit, stdout_unit, optional_plus;
|
||||
int stdin_unit, stdout_unit, stderr_unit, optional_plus;
|
||||
int allocate_init_flag, allocate_init_value;
|
||||
int locus;
|
||||
|
||||
|
@ -443,6 +443,11 @@ static variable variable_table[] = {
|
||||
"Unit number that will be preconnected to standard output\n"
|
||||
"(No preconnection if negative)"},
|
||||
|
||||
{"GFORTRAN_STDERR_UNIT", 0, &options.stderr_unit, init_integer,
|
||||
show_integer,
|
||||
"Unit number that will be preconnected to standard error\n"
|
||||
"(No preconnection if negative)"},
|
||||
|
||||
{"GFORTRAN_USE_STDERR", 1, &options.use_stderr, init_boolean,
|
||||
show_boolean,
|
||||
"Sends library output to standard error instead of standard output."},
|
||||
|
Loading…
Reference in New Issue
Block a user