Commit 17f46ec3 by Jerry DeLisle

re PR fortran/35627 (namelist read error)

2008-03-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	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
parent 31e6722c
2008-03-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
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 <tkoenig@gcc.gnu.org> 2008-03-19 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/32972 PR libfortran/32972
......
...@@ -120,6 +120,9 @@ free_saved (st_parameter_dt *dtp) ...@@ -120,6 +120,9 @@ free_saved (st_parameter_dt *dtp)
static void static void
free_line (st_parameter_dt *dtp) 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) if (dtp->u.p.line_buffer == NULL)
return; return;
...@@ -157,8 +160,8 @@ next_char (st_parameter_dt *dtp) ...@@ -157,8 +160,8 @@ next_char (st_parameter_dt *dtp)
goto done; goto done;
} }
dtp->u.p.item_count = 0; dtp->u.p.item_count = 0;
dtp->u.p.line_buffer_enabled = 0; dtp->u.p.line_buffer_enabled = 0;
} }
/* Handle the end-of-record and end-of-file conditions for /* Handle the end-of-record and end-of-file conditions for
...@@ -685,6 +688,9 @@ read_logical (st_parameter_dt *dtp, int length) ...@@ -685,6 +688,9 @@ read_logical (st_parameter_dt *dtp, int length)
return; /* Null value. */ return; /* Null value. */
default: default:
/* Save the character in case it is the beginning
of the next object name. */
unget_char (dtp, c);
goto bad_logical; goto bad_logical;
} }
...@@ -700,8 +706,6 @@ read_logical (st_parameter_dt *dtp, int length) ...@@ -700,8 +706,6 @@ read_logical (st_parameter_dt *dtp, int length)
unget_char (dtp, c); unget_char (dtp, c);
eat_separator (dtp); 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); set_integer ((int *) dtp->u.p.value, v, length);
free_line (dtp); free_line (dtp);
...@@ -755,8 +759,6 @@ read_logical (st_parameter_dt *dtp, int length) ...@@ -755,8 +759,6 @@ read_logical (st_parameter_dt *dtp, int length)
logical_done: 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_type = BT_LOGICAL;
dtp->u.p.saved_length = length; dtp->u.p.saved_length = length;
set_integer ((int *) dtp->u.p.value, v, length); set_integer ((int *) dtp->u.p.value, v, length);
...@@ -1640,8 +1642,6 @@ read_real (st_parameter_dt *dtp, int length) ...@@ -1640,8 +1642,6 @@ read_real (st_parameter_dt *dtp, int length)
push_char (dtp, 'n'); push_char (dtp, 'n');
} }
dtp->u.p.item_count = 0;
dtp->u.p.line_buffer_enabled = 0;
free_line (dtp); free_line (dtp);
goto done; goto done;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment