OSDN Git Service

2007-10-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Oct 2007 13:59:02 +0000 (13:59 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Oct 2007 13:59:02 +0000 (13:59 +0000)
PR libfortran/33055
* io/inquire.c (inquire_via_unit):  If inquiring by unit, check for
an error condition from the IOSTAT variable and set EXIST to false if
there was a bad unit number.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129344 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/inquire.c

index 2b9e67e..34df500 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/33055
+       * io/inquire.c (inquire_via_unit):  If inquiring by unit, check for
+       an error condition from the IOSTAT variable and set EXIST to false if
+       there was a bad unit number.
+
 2007-10-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/33672
index 2c16a3b..493b223 100644 (file)
@@ -45,7 +45,18 @@ inquire_via_unit (st_parameter_inquire *iqp, gfc_unit * u)
   GFC_INTEGER_4 cf = iqp->common.flags;
 
   if ((cf & IOPARM_INQUIRE_HAS_EXIST) != 0)
-    *iqp->exist = iqp->common.unit >= 0;
+    {
+      *iqp->exist = (iqp->common.unit >= 0
+                    && iqp->common.unit <= GFC_INTEGER_4_HUGE);
+
+      if ((cf & IOPARM_INQUIRE_HAS_FILE) == 0)
+       {
+         if (!(*iqp->exist))
+           *iqp->common.iostat = LIBERROR_BAD_UNIT;
+         *iqp->exist = *iqp->exist
+                       && (*iqp->common.iostat != LIBERROR_BAD_UNIT);
+       }
+    }
 
   if ((cf & IOPARM_INQUIRE_HAS_OPENED) != 0)
     *iqp->opened = (u != NULL);