aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/read.c
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2006-08-15 23:06:44 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2006-08-15 23:06:44 +0000
commit91b30ee5b9c83187fe1d7459cbd29abe302d60ed (patch)
treea00eb1bf11f7cace4d681ea98e21b7e72e529de0 /libgfortran/io/read.c
parent014ec6ee5fcb77e38dca4a6f272349f4859b03c5 (diff)
downloadgcc-91b30ee5b9c83187fe1d7459cbd29abe302d60ed.zip
gcc-91b30ee5b9c83187fe1d7459cbd29abe302d60ed.tar.gz
gcc-91b30ee5b9c83187fe1d7459cbd29abe302d60ed.tar.bz2
re PR fortran/25828 ([f2003] ACCESS='STREAM' io support)
2006-08-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/25828 * libgfortran.h: Rename GFC_LARGE_IO_INT to GFC_IO_INT. * io/file_pos.c (st_backspace): Ignore if access=STREAM. (st_rewind): Handle case of access=STREAM. * io/open.c (access_opt): Add STREAM_ACCESS. (edit_modes): Set current_record to zero only if not STREAM. (new_unit): Initialize maxrec, recl, and last_record for STREAM. * io/read.c (read_x): Advance file position for STREAM. * io/io.h (enum unit_access): Align IOPARM flags with frontend. Add ACCESS_STREAM. Add prototype for is_stream_io () function. Use GFC_IO_INT. * io/inquire.c (inquire_via_unit): Add text for access = "STREAM". * io/unit.c (is_stream_io): New function to return true if access = STREAM. * io/transfer.c (file_mode): Add modes for unformatted stream and formatted stream. (current_mode): Return appropriate file mode based on access flags. (read_block): Handle formatted stream reads. (read_block_direct): Handle unformatted stream reads. (write_block): Handle formatted stream writes. (write_buf): Handle unformatted stream writes. (unformatted_read): Fix up, use temporary for size. (pre_position): Position file for STREAM access. (data_transfer_init): Initialize for stream access, skip irrelevent error checks. (next_record_r),(next_record_w), and (next_record): Do nothing for stream I/O. (finalize_transfer): Flush when all done if stream I/O. From-SVN: r116172
Diffstat (limited to 'libgfortran/io/read.c')
-rw-r--r--libgfortran/io/read.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index 9db5d58..db9ff99 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -841,13 +841,17 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
void
read_x (st_parameter_dt *dtp, int n)
{
- if ((dtp->u.p.current_unit->flags.pad == PAD_NO || is_internal_unit (dtp))
- && dtp->u.p.current_unit->bytes_left < n)
- n = dtp->u.p.current_unit->bytes_left;
-
- dtp->u.p.sf_read_comma = 0;
- if (n > 0)
- read_sf (dtp, &n, 1);
- dtp->u.p.sf_read_comma = 1;
-
+ if (!is_stream_io (dtp))
+ {
+ if ((dtp->u.p.current_unit->flags.pad == PAD_NO || is_internal_unit (dtp))
+ && dtp->u.p.current_unit->bytes_left < n)
+ n = dtp->u.p.current_unit->bytes_left;
+
+ dtp->u.p.sf_read_comma = 0;
+ if (n > 0)
+ read_sf (dtp, &n, 1);
+ dtp->u.p.sf_read_comma = 1;
+ }
+ else
+ dtp->rec += (GFC_IO_INT) n;
}