re PR libfortran/21471 ('POSITION = "APPEND"' doesn't seem to work)

PR libfortran/21471
	* open.c (new_unit): Take care of the case where POSITION_APPEND
	is specified (sseek to the end, and set u>-endfile).
	* gfortran.dg/append-1.f90: New test.

From-SVN: r99560
This commit is contained in:
Francois-Xavier Coudert 2005-05-11 07:56:20 +02:00 committed by François-Xavier Coudert
parent 939176ab43
commit da32fddcb6
4 changed files with 54 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2005-05-10 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/21471
* gfortran.dg/append-1.f90: New test.
2005-05-10 Diego Novillo <dnovillo@redhat.com>
* gcc.dg/pr18501.c: XFAIL.

View File

@ -0,0 +1,36 @@
! PR libfortran/21471
! Testing POSITION="APPEND"
!
! { dg-do run }
subroutine failed
close (10,status='delete')
call abort
end subroutine failed
integer,parameter :: n = 13
integer :: i, j, error
open (10, file='foo')
close (10)
do i = 1, n
open (10, file='foo',position='append')
write (10,*) i
close (10)
end do
open (10,file='foo',status='old')
error = 0
i = -1
do while (error == 0)
i = i + 1
read (10,*,iostat=error) j
if (error == 0) then
if (i + 1 /= j) call failed
end if
if (i > n + 1) call failed
end do
if (i /= n) call failed
close (10,status='delete')
end

View File

@ -1,3 +1,9 @@
2005-05-10 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/21471
* open.c (new_unit): Take care of the case where POSITION_APPEND
is specified (sseek to the end, and set u>-endfile).
2005-05-10 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/20178

View File

@ -356,6 +356,13 @@ new_unit (unit_flags * flags)
u->s = s;
u->flags = *flags;
if (flags->position == POSITION_APPEND)
{
if (sseek (u->s, file_length (u->s)) == FAILURE)
generate_error (ERROR_OS, NULL);
u->endfile = AT_ENDFILE;
}
/* Unspecified recl ends up with a processor dependent value. */
u->recl = (ioparm.recl_in != 0) ? ioparm.recl_in : g.max_offset;