2007-03-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Mar 2007 00:13:19 +0000 (00:13 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Mar 2007 00:13:19 +0000 (00:13 +0000)
PR libgfortran/31052
* file_pos.c: Update Copyright year.
* io/open.c (test_endfile): Restore test_endfile to fix SPEC regression.
Update Copyright year.
* io/io.h: Same.
* io/unix.c (is_special): Add missing type for this function.
Update Copyright year.
* io/transfer.c (next_record_r): Restore test_endfile.
(st_read): Fix whitespace.  Update Copyright year

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

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

index 2bf034e..1281bbb 100644 (file)
@@ -1,3 +1,15 @@
+2007-03-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/31052
+       * file_pos.c: Update Copyright year.
+       * io/open.c (test_endfile): Restore test_endfile to fix SPEC regression.
+       Update Copyright year.
+       * io/io.h: Same.
+       * io/unix.c (is_special): Add missing type for this function.
+       Update Copyright year.
+       * io/transfer.c (next_record_r): Restore test_endfile.
+       (st_read): Fix whitespace.  Update Copyright year
+
 2007-03-20  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        * configure.ac: Add missing check for gettimeofday.
index 085921b..846dae9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2003, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2003, 2005, 2006, 2007 Free Software Foundation, Inc.
    Contributed by Andy Vaught and Janne Blomqvist
 
 This file is part of the GNU Fortran runtime library (libgfortran).
index 3ec9506..26273d9 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
    Contributed by Andy Vaught
 
 This file is part of the GNU Fortran 95 runtime library (libgfortran).
@@ -694,6 +695,9 @@ 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 d22663d..8c6f9fb 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005
+/* Copyright (C) 2002, 2003, 2004, 2005, 2007
    Free Software Foundation, Inc.
    Contributed by Andy Vaught
 
@@ -109,6 +109,19 @@ 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.  */
 
@@ -195,6 +208,8 @@ 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:
@@ -471,6 +486,13 @@ 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 efa788c..77e2ab1 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
    Contributed by Andy Vaught
    Namelist transfer functions contributed by Paul Thomas
 
@@ -2222,6 +2223,9 @@ next_record_r (st_parameter_dt *dtp)
 
       break;
     }
+
+  if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL)
+    test_endfile (dtp->u.p.current_unit);
 }
 
 
@@ -2681,7 +2685,7 @@ st_read (st_parameter_dt *dtp)
 
   data_transfer_init (dtp, 1);
 
-  /* Handle complications dealing with the endfile record. */
+  /* Handle complications dealing with the endfile record.  */
 
   if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL)
     switch (dtp->u.p.current_unit->endfile)
index 4b9d87f..458983c 100644 (file)
@@ -1892,6 +1892,7 @@ is_seekable (stream *s)
 
 /* is_special()-- Return nonzero if the stream is not a regular file.  */
 
+int
 is_special (stream *s)
 {
   return ((unix_stream *) s)->special_file;