aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2008-12-06 21:53:11 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-12-06 21:53:11 +0000
commit97b14ba880379f3c588ce4c9528ac02e114940b0 (patch)
tree3aa6c043ee93c5bf756998c47a44cd51d59401ed /libgfortran
parentf11bea25dd16c9408329efdc83379b44fc644441 (diff)
downloadgcc-97b14ba880379f3c588ce4c9528ac02e114940b0.zip
gcc-97b14ba880379f3c588ce4c9528ac02e114940b0.tar.gz
gcc-97b14ba880379f3c588ce4c9528ac02e114940b0.tar.bz2
re PR fortran/38291 (Rejects I/O with POS= if FMT=*)
2008-12-06 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/38291 * io/transfer.c (data_transfer_init): Add fbuf_flush inadvertently ommitted. Add check for invalid use of REC= with ACCESS="stream". Fix comment. From-SVN: r142528
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog7
-rw-r--r--libgfortran/io/transfer.c16
2 files changed, 21 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 3fc0ca8..765bbd7 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/38291
+ * io/transfer.c (data_transfer_init): Add fbuf_flush inadvertently
+ ommitted. Add check for invalid use of REC= with ACCESS="stream". Fix
+ comment.
+
2008-12-06 Adam Nemet <anemet@caviumnetworks.com>
* runtime/main.c (store_exe_path): Don't crash if argv0 is NULL.
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 4ddfd9f..318d221 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1967,7 +1967,7 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
return;
}
- /* Check the record or position number. */
+ /* Check the record number. */
if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT
&& (cf & IOPARM_DT_HAS_REC) == 0)
@@ -1986,6 +1986,15 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
return;
}
+ if (dtp->u.p.current_unit->flags.access == ACCESS_STREAM
+ && (cf & IOPARM_DT_HAS_REC) != 0)
+ {
+ generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT,
+ "Record number not allowed for stream access "
+ "data transfer");
+ return;
+ }
+
/* Process the ADVANCE option. */
dtp->u.p.advance_status
@@ -2146,7 +2155,10 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
/* Required for compatibility between 4.3 and 4.4 runtime. Check
to see if we might be reading what we wrote before */
if (dtp->u.p.current_unit->mode == WRITING)
- flush(dtp->u.p.current_unit->s);
+ {
+ fbuf_flush (dtp->u.p.current_unit, 1);
+ flush(dtp->u.p.current_unit->s);
+ }
if (dtp->pos < file_length (dtp->u.p.current_unit->s))
dtp->u.p.current_unit->endfile = NO_ENDFILE;