re PR libfortran/18364 (endfile does not truncate file)
authorBud Davis <bdavis9659@comcast.net>
Sat, 27 Nov 2004 23:35:47 +0000 (23:35 +0000)
committerBud Davis <bdavis@gcc.gnu.org>
Sat, 27 Nov 2004 23:35:47 +0000 (23:35 +0000)
2004-11-27  Bud Davis  <bdavis9659@comcast.net>

        PR fortran/18364
        * gfortran.dg/endfile.f90: New test.
        *  io/endfile.c (st_endfile): flush the stream before truncating.

From-SVN: r91400

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/endfile.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/endfile.c

index 3965e60cf4e5f19837f3a8ec44b6c5576fad4169..f1dd94ccb04968aec8922cbc600f82e669588f61 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-27  Bud Davis  <bdavis9659@comcast.net>
+
+       PR fortran/18364
+       * gfortran.dg/endfile.f90: New test.
+
 2004-11-27  Falk Hueffner  <falk@debian.org>
 
        * gcc.dg/loop-6.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/endfile.f90 b/gcc/testsuite/gfortran.dg/endfile.f90
new file mode 100644 (file)
index 0000000..1eabe9f
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do run } 
+! pr18364 endfile does not truncate file.
+!   write out 20 records
+!   rewind
+!   read 10 records
+!   endfile
+!   close file
+!   open file
+!   detect file has only 10 records  
+      implicit none
+      integer i,j
+      open(unit=10,file='test.dat',access='sequential',status='replace')
+      do i=1, 20
+        write (10,'(I4)') i
+      end do
+      rewind(10)
+      do i=1,10
+        read (10,'(I4)') j
+      end do
+      endfile(10)
+      close(10)
+      open(unit=10,file='test.dat',access='sequential',status='old')
+      do i=1,20 
+        read (10,'(I4)',end=99) j 
+      end do
+      ! should never get here
+      call abort
+  99  continue ! end of file
+      if (j.ne.10) call abort   
+      close(10,status='delete')
+      end
index f4019cfe740aac4e70dae714110da54e0ca8ab2b..a27c75d77d540c2af8ec7477913bd5b95cb869fb 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-27  Bud Davis  <bdavis9659@comcast.net>
+
+       PR fortran/18364
+       *  io/endfile.c (st_endfile): flush the stream before truncating.
+
 2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
 
        * configure: Regenerate for libtool reversion.
index ca40fe4eb799e963973476471673a78cadf1e4e8..d8462a3faed566a246452caa5f47d4c98d5da0de 100644 (file)
@@ -38,6 +38,7 @@ st_endfile (void)
       if (u->current_record)
        next_record (1);
 
+      flush(u->s);
       struncate (u->s);
       u->endfile = AFTER_ENDFILE;
     }