diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2011-02-27 20:06:10 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2011-02-27 20:06:10 +0000 |
commit | 353255cd6f48deafcd7e0b0cd5488ec4f82e7c85 (patch) | |
tree | 2d6aff72c8dec42a2cbfc3a0201791ef12bf6b26 /libgfortran | |
parent | f6b439c98cc246de3e27c45a30ad5877b7ccb958 (diff) | |
download | gcc-353255cd6f48deafcd7e0b0cd5488ec4f82e7c85.zip gcc-353255cd6f48deafcd7e0b0cd5488ec4f82e7c85.tar.gz gcc-353255cd6f48deafcd7e0b0cd5488ec4f82e7c85.tar.bz2 |
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
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 7 | ||||
-rw-r--r-- | libgfortran/io/list_read.c | 10 |
2 files changed, 17 insertions, 0 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index bc85a6c..800c149 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -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> PR libfortran/45165 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index 9d797cc..ea23232 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -2985,6 +2985,11 @@ namelist_read (st_parameter_dt *dtp) { int c; 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 new object name. Should this fail, error message can give previous name. */ @@ -3058,6 +3063,11 @@ find_nml_name: goto nml_err_ret; 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); |