OSDN Git Service

2007-04-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 1 Apr 2007 17:32:20 +0000 (17:32 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 1 Apr 2007 17:32:20 +0000 (17:32 +0000)
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.

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

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

index 761e5b9..d360b6c 100644 (file)
@@ -1,5 +1,15 @@
 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
        * io/transfer.c (read_block_direct): Do not generate error when reading
        past EOF on a short record that is less than the RECL= specified.
index ef1a287..df00669 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 44ff69d..742610a 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 3c6deb4..65d83ef 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: