diff options
author | jvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-06 01:39:34 +0000 |
---|---|---|
committer | jvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-06 01:39:34 +0000 |
commit | 4e63a695883c39f00b6356a9c34ad30142827460 (patch) | |
tree | 1b49be523e21bb74b123b6ac069be07266b1e925 /libgfortran | |
parent | c53d038d21a28dfd393a11981b902549bdec8cf9 (diff) | |
download | ppe42-gcc-4e63a695883c39f00b6356a9c34ad30142827460.tar.gz ppe42-gcc-4e63a695883c39f00b6356a9c34ad30142827460.zip |
2006-01-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/25598
* io/file_pos.c (unformatted_backspace): Assure the new file position
to seek is not less than zero.
(st_backspace): Set unit bytes_left to zero.
* io/transfer.c (next_record_r): Fix line lengths, no functional change.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109405 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 13 | ||||
-rw-r--r-- | libgfortran/io/file_pos.c | 5 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 7 |
3 files changed, 22 insertions, 3 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 0bfddc9730a..ab6c766f8b2 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,4 +1,17 @@ +<<<<<<< .mine +2006-01-03 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/25598 + * io/file_pos.c (unformatted_backspace): Assure the new file position + to seek is not less than zero. + (st_backspace): Set unit bytes_left to zero. + * io/transfer.c (next_record_r): Fix line lengths, no functional change. + a null value (default). Revert patch of 25419 on 2005-12-28. + +2005-12-31 Jerry DeLisle <jvdelisle@gcc.gnu.org> +======= 2006-01-02 Paolo Bonzini <bonzini@gnu.org> +>>>>>>> .r109401 PR target/25259 * configure.ac: Use GCC_HEADER_STDINT. diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c index d9ac1e7f7ed..ba8f6317221 100644 --- a/libgfortran/io/file_pos.c +++ b/libgfortran/io/file_pos.c @@ -120,7 +120,9 @@ unformatted_backspace (st_parameter_filepos *fpp, gfc_unit *u) else reverse_memcpy (&m, p, sizeof (gfc_offset)); - new = file_position (u->s) - m - 2*length; + if ((new = file_position (u->s) - m - 2*length) < 0) + new = 0; + if (sseek (u->s, new) == FAILURE) goto io_error; @@ -179,6 +181,7 @@ st_backspace (st_parameter_filepos *fpp) u->endfile = NO_ENDFILE; u->current_record = 0; + u->bytes_left = 0; } done: diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 2c12294398e..049ebb24771 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -1645,8 +1645,10 @@ next_record_r (st_parameter_dt *dtp) switch (current_mode (dtp)) { case UNFORMATTED_SEQUENTIAL: - dtp->u.p.current_unit->bytes_left += sizeof (gfc_offset); /* Skip over tail */ + /* Skip over tail */ + dtp->u.p.current_unit->bytes_left += sizeof (gfc_offset); + /* Fall through... */ case FORMATTED_DIRECT: @@ -1656,7 +1658,8 @@ next_record_r (st_parameter_dt *dtp) if (is_seekable (dtp->u.p.current_unit->s)) { - new = file_position (dtp->u.p.current_unit->s) + dtp->u.p.current_unit->bytes_left; + new = file_position (dtp->u.p.current_unit->s) + + dtp->u.p.current_unit->bytes_left; /* Direct access files do not generate END conditions, only I/O errors. */ |