From 17f46ec355995413b4eefb3e37863c558619c113 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Thu, 20 Mar 2008 02:05:05 +0000 Subject: [PATCH] re PR fortran/35627 (namelist read error) 2008-03-19 Jerry DeLisle PR libfortran/35627 * io/list_read.c (free_line): Clear the line buffer enable flag and reset the index into line_buffer, aka item_count. (next_char): Cleanup whitespace. (read_logical): Use unget_char to assure that the first character of the bad logical is saved in case it is part of an object name. Remove the clearing of index and flag that is now in free_line. (read_real): Likewise. From-SVN: r133360 --- libgfortran/ChangeLog | 11 +++++++++++ libgfortran/io/list_read.c | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 6a1865e0278..ee0aae8ceea 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,14 @@ +2008-03-19 Jerry DeLisle + + PR libfortran/35627 + * io/list_read.c (free_line): Clear the line buffer enable flag and + reset the index into line_buffer, aka item_count. + (next_char): Cleanup whitespace. + (read_logical): Use unget_char to assure that the first character of the + bad logical is saved in case it is part of an object name. Remove the + clearing of index and flag that is now in free_line. + (read_real): Likewise. + 2008-03-19 Thomas Koenig PR libfortran/32972 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index cbe4a649777..d295431bc3a 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -120,6 +120,9 @@ free_saved (st_parameter_dt *dtp) static void free_line (st_parameter_dt *dtp) { + dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_enabled = 0; + if (dtp->u.p.line_buffer == NULL) return; @@ -157,8 +160,8 @@ next_char (st_parameter_dt *dtp) goto done; } - dtp->u.p.item_count = 0; - dtp->u.p.line_buffer_enabled = 0; + dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_enabled = 0; } /* Handle the end-of-record and end-of-file conditions for @@ -685,6 +688,9 @@ read_logical (st_parameter_dt *dtp, int length) return; /* Null value. */ default: + /* Save the character in case it is the beginning + of the next object name. */ + unget_char (dtp, c); goto bad_logical; } @@ -700,8 +706,6 @@ read_logical (st_parameter_dt *dtp, int length) unget_char (dtp, c); eat_separator (dtp); - dtp->u.p.item_count = 0; - dtp->u.p.line_buffer_enabled = 0; set_integer ((int *) dtp->u.p.value, v, length); free_line (dtp); @@ -755,8 +759,6 @@ read_logical (st_parameter_dt *dtp, int length) logical_done: - dtp->u.p.item_count = 0; - dtp->u.p.line_buffer_enabled = 0; dtp->u.p.saved_type = BT_LOGICAL; dtp->u.p.saved_length = length; set_integer ((int *) dtp->u.p.value, v, length); @@ -1640,8 +1642,6 @@ read_real (st_parameter_dt *dtp, int length) push_char (dtp, 'n'); } - dtp->u.p.item_count = 0; - dtp->u.p.line_buffer_enabled = 0; free_line (dtp); goto done; -- 2.30.2