This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch, libfortran] PR44931 For INPUT_UNIT, INQUIRE NAME= should not return "stdin"
- From: Tobias Burnus <burnus at net-b dot de>
- To: Jerry DeLisle <jvdelisle at verizon dot net>
- Cc: gfortran <fortran at gcc dot gnu dot org>, gcc patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 25 Jul 2010 11:00:23 +0200
- Subject: Re: [patch, libfortran] PR44931 For INPUT_UNIT, INQUIRE NAME= should not return "stdin"
- References: <4C4B8BA3.2070202@verizon.net>
Dear Jerry, Dave, and Kai,
Dave and Kai: I have CCed you as I have a question regarding MinGW/Cygwin.
Jerry DeLisle wrote:
> The attach patch uses ttyname to return the device file name for
> inquire by unit.
> Regression tested on x86-64.
>
> Test case attached, but the reulst are system dependent so I will not
> add it to the testsuite.
Kai, Dave: The idea is that INQUIRE returns for stdin, stdout, and
stderr a "filename", which can be used to '(re)open' ([re]associate) a
Fortran I/O unit number with those standard I/O "streams". (Non
normative note in the standard: "the value [for NAME=] returned [by
"INQUIRE(UNIT=...,NAME=...)"] shall be suitable for use as the value of
the file-name-expr in the FILE= specifier in an OPEN statement.")
Under Unix, ttynam should roughly do this, but I fear it might not work
under Windows - in particular under MinGW(.org,64). Or does it?
Would it be an option to use conout$, conin$ and conerr$ for those? I
think on MinGW, libgfortran (io/unix.c) uses them directly (well conerr$
= conout$) while on cygwin those are mapped to /dev/con{in,out,err}. At
least for MinGW this seems to be required as Windows does not seem to
have a tty concept. For Cygwin the Unix approach should work.
> OK for trunk?
I think you need to guard the use of ttyname by
#ifdef HAVE_TTYNAME
...
#else
...
#endif
Besides, I wonder whether using "" as string is better than using the
default std{in,out,err} in case ttyname fails. (This happens for
instance if the standard I/O redirected to a file or pipe.)
Otherwise, the patch looks fine to me.
Tobias
> 2010-07-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
>
> PR libfortran/44931
> * io/inquire.c (inquire_via_unit): Use ttyname to return actual
> device
> file name for stdin, stdout, and stderr. If ttyname does not succeed
> fall back to default names for these units. Include string.h to allow
> using strlen function.
> * unix.c: Remove typedef of unix_stream structure, move to unix.h.
> * unix.h: Add typedef of unix_stream structure so that it is
> accessible to inquire.c.