re PR fortran/47778 (reading two arrays of structures from namelist fails)

2011-02-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/47778
	* io/list_read.c (namelist_read): Intialize the error string buffere.
	If pprev_nl was used during the previous namelist read and the rank
	was zero, reset the pointer to NULL for the next namelist read.

From-SVN: r170548
This commit is contained in:
Jerry DeLisle 2011-02-27 20:06:10 +00:00
parent f6b439c98c
commit 353255cd6f
2 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2011-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/47778
* io/list_read.c (namelist_read): Intialize the error string buffere.
If pprev_nl was used during the previous namelist read and the rank
was zero, reset the pointer to NULL for the next namelist read.
2011-02-26 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> 2011-02-26 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR libfortran/45165 PR libfortran/45165

View File

@ -2985,6 +2985,11 @@ namelist_read (st_parameter_dt *dtp)
{ {
int c; int c;
char nml_err_msg[200]; char nml_err_msg[200];
/* Initialize the error string buffer just in case we get an unexpected fail
somewhere and end up at nml_err_ret. */
strcpy (nml_err_msg, "Internal namelist read error");
/* Pointer to the previously read object, in case attempt is made to read /* Pointer to the previously read object, in case attempt is made to read
new object name. Should this fail, error message can give previous new object name. Should this fail, error message can give previous
name. */ name. */
@ -3058,6 +3063,11 @@ find_nml_name:
goto nml_err_ret; goto nml_err_ret;
generate_error (&dtp->common, LIBERROR_READ_VALUE, nml_err_msg); generate_error (&dtp->common, LIBERROR_READ_VALUE, nml_err_msg);
} }
/* Reset the previous namelist pointer if we know we are not going
to be doing multiple reads within a single namelist object. */
if (prev_nl && prev_nl->var_rank == 0)
prev_nl = NULL;
} }
free_saved (dtp); free_saved (dtp);