re PR fortran/35627 (namelist read error)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 20 Mar 2008 02:05:05 +0000 (02:05 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 20 Mar 2008 02:05:05 +0000 (02:05 +0000)
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

libgfortran/ChangeLog
libgfortran/io/list_read.c

index 6a1865e02781fb5f22bd755d48d0fae74306d457..ee0aae8ceeaa0552d46690e14ea5675a169cf717 100644 (file)
@@ -1,3 +1,14 @@
+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>
 
        PR libfortran/32972
index cbe4a6497776d813eb8cc51ec54bdb0f0c431127..d295431bc3a97836738c1b3827e225b259454774 100644 (file)
@@ -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;