--- /dev/null
+! { dg-do run }
+!
+! PR fortran/60286
+!
+! Contributed by Alexander Vogt
+!
+program test_inquire
+ use, intrinsic :: ISO_Fortran_env
+ implicit none
+ character(len=20) :: s_read, s_write, s_readwrite
+
+ inquire(unit=input_unit, read=s_read, write=s_write, &
+ readwrite=s_readwrite)
+ if (s_read /= "YES" .or. s_write /= "NO" .or. s_readwrite /="NO") then
+ call abort()
+ endif
+
+ inquire(unit=output_unit, read=s_read, write=s_write, &
+ readwrite=s_readwrite)
+ if (s_read /= "NO" .or. s_write /= "YES" .or. s_readwrite /="NO") then
+ call abort()
+ endif
+
+ inquire(unit=error_unit, read=s_read, write=s_write, &
+ readwrite=s_readwrite)
+ if (s_read /= "NO" .or. s_write /= "YES" .or. s_readwrite /="NO") then
+ call abort()
+ endif
+end program test_inquire
+2014-02-21 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/60286
+ * libgfortran/io/inquire.c (yes, no): New static const char vars.
+ (inquire_via_unit): Use them. Use OPEN mode instead of using
+ POSIX's access to query about write=, read= and readwrite=.
+
2014-01-20 Jerry DeLisle <jvdelisle@gcc.gnu>
Dominique d'Humieres <dominiq@lps.ens.fr>
#include <string.h>
-static const char undefined[] = "UNDEFINED";
+static const char yes[] = "YES", no[] = "NO", undefined[] = "UNDEFINED";
/* inquire_via_unit()-- Inquiry via unit number. The unit might not exist. */
{
case ACCESS_DIRECT:
case ACCESS_STREAM:
- p = "NO";
+ p = no;
break;
case ACCESS_SEQUENTIAL:
- p = "YES";
+ p = yes;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad access");
{
case ACCESS_SEQUENTIAL:
case ACCESS_STREAM:
- p = "NO";
+ p = no;
break;
case ACCESS_DIRECT:
- p = "YES";
+ p = yes;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad access");
switch (u->flags.form)
{
case FORM_FORMATTED:
- p = "YES";
+ p = yes;
break;
case FORM_UNFORMATTED:
- p = "NO";
+ p = no;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad form");
switch (u->flags.form)
{
case FORM_FORMATTED:
- p = "NO";
+ p = no;
break;
case FORM_UNFORMATTED:
- p = "YES";
+ p = yes;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad form");
switch (u->flags.pad)
{
case PAD_YES:
- p = "YES";
+ p = yes;
break;
case PAD_NO:
- p = "NO";
+ p = no;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad pad");
switch (u->flags.async)
{
case ASYNC_YES:
- p = "YES";
+ p = yes;
break;
case ASYNC_NO:
- p = "NO";
+ p = no;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad async");
{
case ACCESS_SEQUENTIAL:
case ACCESS_DIRECT:
- p = "NO";
+ p = no;
break;
case ACCESS_STREAM:
- p = "YES";
+ p = yes;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad pad");
if ((cf & IOPARM_INQUIRE_HAS_READ) != 0)
{
- p = (u == NULL) ? inquire_read (NULL, 0) :
- inquire_read (u->file, u->file_len);
-
+ p = (!u || u->flags.action == ACTION_WRITE) ? no : yes;
cf_strcpy (iqp->read, iqp->read_len, p);
}
if ((cf & IOPARM_INQUIRE_HAS_WRITE) != 0)
{
- p = (u == NULL) ? inquire_write (NULL, 0) :
- inquire_write (u->file, u->file_len);
-
+ p = (!u || u->flags.action == ACTION_READ) ? no : yes;
cf_strcpy (iqp->write, iqp->write_len, p);
}
if ((cf & IOPARM_INQUIRE_HAS_READWRITE) != 0)
{
- p = (u == NULL) ? inquire_readwrite (NULL, 0) :
- inquire_readwrite (u->file, u->file_len);
-
+ p = (!u || u->flags.action != ACTION_READWRITE) ? no : yes;
cf_strcpy (iqp->readwrite, iqp->readwrite_len, p);
}
switch (u->flags.pad)
{
case PAD_NO:
- p = "NO";
+ p = no;
break;
case PAD_YES:
- p = "YES";
+ p = yes;
break;
default:
internal_error (&iqp->common, "inquire_via_unit(): Bad pad");