From c9330b0331b05cb271bc9a18970d10894b370765 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sun, 29 May 2005 14:22:49 +0200 Subject: re PR libfortran/20006 ($ format extension doesn't work) PR libfortran/20006 * io.c (format_item_1): Add check and extension warning for $ edit descriptor. * io/format.c (parse_format_list): Set repeat count of $ format node to 1. * io/transfer.c (read_sf): Add g.seen_dollar to the test concerning advancing I/O. (data_transfer_init): Likewise. (finalize_transfer): Likewise. From-SVN: r100314 --- libgfortran/io/format.c | 1 + libgfortran/io/transfer.c | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'libgfortran/io') diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 413a664..229a937 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -579,6 +579,7 @@ parse_format_list (void) case FMT_DOLLAR: get_fnode (&head, &tail, FMT_DOLLAR); + tail->repeat = 1; goto between_desc; case FMT_T: diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index b51da52..46bec83 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -191,7 +191,7 @@ read_sf (int *length) /* If we see an EOR during non-advancing I/O, we need to skip the rest of the I/O statement. Set the corresponding flag. */ - if (advance_status == ADVANCE_NO) + if (advance_status == ADVANCE_NO || g.seen_dollar) eor_condition = 1; /* Without padding, terminate the I/O statement without assigning @@ -1187,7 +1187,7 @@ data_transfer_init (int read_flag) } else { - if (advance_status == ADVANCE_YES) + if (advance_status == ADVANCE_YES && !g.seen_dollar) current_unit->read_bad = 1; } @@ -1459,11 +1459,12 @@ finalize_transfer (void) { free_fnodes (); - if (advance_status == ADVANCE_NO) + if (advance_status == ADVANCE_NO || g.seen_dollar) { /* Most systems buffer lines, so force the partial record to be written out. */ flush (current_unit->s); + g.seen_dollar = 0; return; } -- cgit v1.1