From 203f344c3dc29789cd6d2f57f34c10b05860c239 Mon Sep 17 00:00:00 2001 From: Bud Davis Date: Sat, 27 Nov 2004 23:35:47 +0000 Subject: [PATCH] re PR libfortran/18364 (endfile does not truncate file) 2004-11-27 Bud Davis 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 | 5 +++++ gcc/testsuite/gfortran.dg/endfile.f90 | 31 +++++++++++++++++++++++++++ libgfortran/ChangeLog | 5 +++++ libgfortran/io/endfile.c | 1 + 4 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/endfile.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3965e60cf4e..f1dd94ccb04 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-11-27 Bud Davis + + PR fortran/18364 + * gfortran.dg/endfile.f90: New test. + 2004-11-27 Falk Hueffner * 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 00000000000..1eabe9ffc7c --- /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 f4019cfe740..a27c75d77d5 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2004-11-27 Bud Davis + + PR fortran/18364 + * io/endfile.c (st_endfile): flush the stream before truncating. + 2004-11-25 Kelley Cook * configure: Regenerate for libtool reversion. diff --git a/libgfortran/io/endfile.c b/libgfortran/io/endfile.c index ca40fe4eb79..d8462a3faed 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; } -- 2.30.2