diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/endfile.f90 | 31 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 5 | ||||
-rw-r--r-- | libgfortran/io/endfile.c | 1 |
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; } |