diff options
-rw-r--r-- | libgfortran/ChangeLog | 11 | ||||
-rw-r--r-- | 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 <jvdelisle@gcc.gnu> + + 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 <jvdelisle@gcc.gnu> 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 <jvdelisle@gcc.gnu> 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 |