From e94710443aa0359d24db682ba8d856776c3dfa1f Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Sat, 15 Mar 2014 15:12:01 +0000 Subject: [PATCH 1/1] re PR fortran/58324 (Bogus END-of-line error with list-directed I/O of file without trailing sequential record marker) 2014-03-15 Jerry DeLisle PR libfortran/58324 * io/list_read.c (finish_list_read): Read one character to check for the end of the file. If it is the end, then issue the file end error message. If not, use eat_line to reach the end without giving error. The next attempt to read will then issue the error as described above. From-SVN: r208591 --- libgfortran/ChangeLog | 11 ++++++++++- libgfortran/io/list_read.c | 13 +++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f32b34cd8a4..358a31cbe5a 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2014-03-15 Jerry DeLisle + + PR libfortran/58324 + * io/list_read.c (finish_list_read): Read one character to check + for the end of the file. If it is the end, then issue the file + end error message. If not, use eat_line to reach the end + without giving error. The next attempt to read will then + issue the error as described above. + 2014-03-12 Jerry DeLisle PR libfortran/38199 @@ -10,7 +19,7 @@ formatted READ. * io/list_read.c (finish_list_read): Don't call eat_line for internal units. - + 2014-03-08 Jerry DeLisle PR libfortran/38199 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index 2467569d639..caeb41b0782 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -2092,8 +2092,6 @@ list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind, void finish_list_read (st_parameter_dt *dtp) { - int err; - free_saved (dtp); fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode); @@ -2106,13 +2104,20 @@ finish_list_read (st_parameter_dt *dtp) if (!is_internal_unit (dtp)) { - err = eat_line (dtp); - if (err == LIBERROR_END) + int c; + c = next_char (dtp); + if (c == EOF) { free_line (dtp); hit_eof (dtp); + return; } + if (c != '\n') + eat_line (dtp); } + + free_line (dtp); + } /* NAMELIST INPUT -- 2.30.2