re PR libfortran/31052 ([4.2 only] Bad IOSTAT values when readings NAMELISTs past...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 1 Apr 2007 17:32:20 +0000 (17:32 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 1 Apr 2007 17:32:20 +0000 (17:32 +0000)
2007-04-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/31052
* io/open.c (test_endfile): Delete this function.
(edit_modes): Delete call to test_endfile.
(new_unit): Likewise.
* io/io.h: Delete prototype for test_endfile.
* io/transfer.c (next_record_r): Remove use of test_endfile.
(st_read):  Add test for end file condition and adjust status.

From-SVN: r123403

libgfortran/ChangeLog
libgfortran/io/io.h
libgfortran/io/open.c
libgfortran/io/transfer.c

index 761e5b9a4d223e62c218d906eb97bac9cca597ec..d360b6cb0c52669f8190eb456cb5e19fd12b50d6 100644 (file)
@@ -1,3 +1,13 @@
+2007-04-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/31052
+       * io/open.c (test_endfile): Delete this function.
+       (edit_modes): Delete call to test_endfile.
+       (new_unit): Likewise.
+       * io/io.h: Delete prototype for test_endfile.
+       * io/transfer.c (next_record_r): Remove use of test_endfile.
+       (st_read):  Add test for end file condition and adjust status. 
+
 2007-04-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/31366
index ef1a287a184ac5131de8a9bced9624110a2013f4..df006693b28233e83e0ac89ed307247a3480f38e 100644 (file)
@@ -695,9 +695,6 @@ internal_proto(unlock_unit);
 
 /* open.c */
 
-extern void test_endfile (gfc_unit *);
-internal_proto(test_endfile);
-
 extern gfc_unit *new_unit (st_parameter_open *, gfc_unit *, unit_flags *);
 internal_proto(new_unit);
 
index 44ff69d68dbff671292653b46eac30bf45ef041f..742610a3ef67b20be532bd96479258429581a44b 100644 (file)
@@ -109,19 +109,6 @@ static const st_option convert_opt[] =
   { NULL, 0}
 };
 
-/* Given a unit, test to see if the file is positioned at the terminal
-   point, and if so, change state from NO_ENDFILE flag to AT_ENDFILE.
-   This prevents us from changing the state from AFTER_ENDFILE to
-   AT_ENDFILE.  */
-
-void
-test_endfile (gfc_unit * u)
-{
-  if (u->endfile == NO_ENDFILE && file_length (u->s) == file_position (u->s))
-    u->endfile = AT_ENDFILE;
-}
-
-
 /* Change the modes of a file, those that are allowed * to be
    changed.  */
 
@@ -208,8 +195,6 @@ edit_modes (st_parameter_open *opp, gfc_unit * u, unit_flags * flags)
 
       u->current_record = 0;
       u->last_record = 0;
-
-      test_endfile (u);                /* We might be at the end.  */
       break;
 
     case POSITION_APPEND:
@@ -487,13 +472,6 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
   memmove (u->file, opp->file, opp->file_len);
   u->file_len = opp->file_len;
 
-  /* Curiously, the standard requires that the
-     position specifier be ignored for new files so a newly connected
-     file starts out at the initial point.  We still need to figure
-     out if the file is at the end or not.  */
-
-  test_endfile (u);
-
   if (flags->status == STATUS_SCRATCH && opp->file != NULL)
     free_mem (opp->file);
   return u;
index 3c6deb4998ce384cb7221abd1a48794e3e1d49d4..65d83ef465c499d0646c9c66b1e156f039d7ddb2 100644 (file)
@@ -2226,10 +2226,6 @@ next_record_r (st_parameter_dt *dtp)
 
       break;
     }
-
-  if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL
-      && !dtp->u.p.namelist_mode)
-    test_endfile (dtp->u.p.current_unit);
 }
 
 
@@ -2702,6 +2698,9 @@ st_read (st_parameter_dt *dtp)
     switch (dtp->u.p.current_unit->endfile)
       {
       case NO_ENDFILE:
+       if (file_length (dtp->u.p.current_unit->s)
+           == file_position (dtp->u.p.current_unit->s))
+         dtp->u.p.current_unit->endfile = AT_ENDFILE;
        break;
 
       case AT_ENDFILE: