From 0b4d979f55a573d7b145b6925d3601baa3be50e8 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle <jvdelisle@gcc.gnu.org> Date: Thu, 19 Nov 2009 04:50:04 +0000 Subject: [PATCH] re PR fortran/42090 (I/O: Problems when reading partial records in formatted direct access files) 2009-11-18 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/42090 * io/transfer.c (skip_record): Set bytes_left_subrecord to zero after skipping the remaining bytes in the record. (next_record_r): Call skip_record with the number of bytes_left to be skipped. From-SVN: r154316 --- libgfortran/ChangeLog | 8 ++++++++ libgfortran/io/transfer.c | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 3ee00936037e..8a816fc9e5ad 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2009-11-18 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/42090 + * io/transfer.c (skip_record): Set bytes_left_subrecord to zero after + skipping the remaining bytes in the record. + (next_record_r): Call skip_record with the number of bytes_left to be + skipped. + 2009-11-02 Janne Blomqvist <jb@gcc.gnu.org> * Makefile.am (gfor_io_headers): Add fbuf.h, format.h, unix.h. diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index b5f52b1ccf38..a110c6529ffe 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -2661,6 +2661,8 @@ skip_record (st_parameter_dt *dtp, ssize_t bytes) if (sseek (dtp->u.p.current_unit->s, dtp->u.p.current_unit->bytes_left_subrecord, SEEK_CUR) < 0) generate_error (&dtp->common, LIBERROR_OS, NULL); + + dtp->u.p.current_unit->bytes_left_subrecord = 0; } else { /* Seek by reading data. */ @@ -2741,7 +2743,7 @@ next_record_r (st_parameter_dt *dtp) case FORMATTED_DIRECT: case UNFORMATTED_DIRECT: - skip_record (dtp, 0); + skip_record (dtp, dtp->u.p.current_unit->bytes_left); break; case FORMATTED_STREAM: -- GitLab