2011-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Feb 2011 20:06:10 +0000 (20:06 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Feb 2011 20:06:10 +0000 (20:06 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170548 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/list_read.c

index bc85a6c..800c149 100644 (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>
 
        PR libfortran/45165
index 9d797cc..ea23232 100644 (file)
@@ -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);