diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-03-22 22:03:13 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-03-22 22:03:13 +0000 |
commit | 35077d5aed52d82f38476ba5cb95cc4df0382483 (patch) | |
tree | 7a539c2bba799cb72893338ac68d076046838ab1 | |
parent | 1b738915e844455ed10082d9b6edab47eb7a9fd8 (diff) | |
download | gcc-35077d5aed52d82f38476ba5cb95cc4df0382483.zip gcc-35077d5aed52d82f38476ba5cb95cc4df0382483.tar.gz gcc-35077d5aed52d82f38476ba5cb95cc4df0382483.tar.bz2 |
re PR fortran/35632 (stream io broken on FreeBSD due to ftruncate changes.)
2008-03-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/35632
* io/transfer.c (data_transfer_init): Fix whitespace.
(next_record_w): Truncate the file only if the stream
position is short of the file end.
From-SVN: r133454
-rw-r--r-- | libgfortran/ChangeLog | 7 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index c2bf6ca..3ccccc9 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2008-03-22 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/35632 + * io/transfer.c (data_transfer_init): Fix whitespace. + (next_record_w): Truncate the file only if the stream + position is short of the file end. + 2008-03-21 Jerry DeLisle <jvdelisle@gcc.gnu.org> * intrinsics/pack_generic.c: Fix typo. diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index c3e9114..5ccc958 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -1985,12 +1985,12 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag) if (dtp->u.p.mode == READING && dtp->u.p.current_unit->mode == WRITING && !is_internal_unit (dtp)) - flush(dtp->u.p.current_unit->s); + flush(dtp->u.p.current_unit->s); /* Check whether the record exists to be read. Only a partial record needs to exist. */ - if (dtp->u.p.mode == READING && (dtp->rec -1) + if (dtp->u.p.mode == READING && (dtp->rec - 1) * dtp->u.p.current_unit->recl >= file_length (dtp->u.p.current_unit->s)) { generate_error (&dtp->common, LIBERROR_BAD_OPTION, @@ -2604,7 +2604,9 @@ next_record_w (st_parameter_dt *dtp, int done) if (is_stream_io (dtp)) { dtp->u.p.current_unit->strm_pos += len; - struncate(dtp->u.p.current_unit->s); + if (dtp->u.p.current_unit->strm_pos + < file_length (dtp->u.p.current_unit->s)) + struncate (dtp->u.p.current_unit->s); } } |