Commit c100eff1 by Paul Brook Committed by Paul Brook

rewind.c (st_rewind): Reset unit to read mode.

	* io/rewind.c (st_rewind): Reset unit to read mode.
testsuite/
	* gfortran.dg/rewind_1.f90: New test.

From-SVN: r86659
parent 57406c63
2004-08-27 Paul Brook <paul@codesourcery.com>
* gfortran.dg/rewind_1.f90: New test.
2004-08-27 Bud Davis <bdavis9659@comcast.net>
PR fortran/16597
......
! { dg-do run }
! Check that rewind doesn't delete a file.
! Writing to the file truncates it at the end of the current record. Out
! IO library was defering the actual truncation until the file was rewound.
! A second rewind would then (incorrectly) think the file had just been
! written to, and truncate the file to zero length.
program foo
character*11 s
open(unit=11, status="SCRATCH")
write(11, '(a11)') "Hello World"
rewind(11)
rewind(11)
s = ""
read(11, '(a11)') s
close(11)
if (s .ne. "Hello World") call abort
end program
2004-08-27 Paul Brook <paul@codesourcery.com>
* io/rewind.c (st_rewind): Reset unit to read mode.
2004-08-27 Bud Davis <bdavis9659@comcast.net>
PR fortran/16597
......
......@@ -40,8 +40,13 @@ st_rewind (void)
"Cannot REWIND a file opened for DIRECT access");
else
{
/* If we have been writing to the file, the last written record
is the last record in the file, so trincate the file now.
Reset to read mode so two consecutive rewind statements
don't delete the file contents. */
if (u->mode==WRITING)
struncate(u->s);
u->mode = READING;
u->last_record = 0;
if (sseek (u->s, 0) == FAILURE)
generate_error (ERROR_OS, NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment