summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/io/list_read.c16
2 files changed, 19 insertions, 8 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6a1865e0278..ee0aae8ceea 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index cbe4a649777..d295431bc3a 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -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;