aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/endfile.f9031
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/io/endfile.c1
4 files changed, 42 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3965e60..f1dd94c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..1eabe9f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/endfile.f90
@@ -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
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index f4019cf..a27c75d 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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.
diff --git a/libgfortran/io/endfile.c b/libgfortran/io/endfile.c
index ca40fe4..d8462a3 100644
--- a/libgfortran/io/endfile.c
+++ b/libgfortran/io/endfile.c
@@ -38,6 +38,7 @@ st_endfile (void)
if (u->current_record)
next_record (1);
+ flush(u->s);
struncate (u->s);
u->endfile = AFTER_ENDFILE;
}