re PR libfortran/61173 (Erroneous "end of file" with internal read)
2014-05-23 Jerry DeLisle <jvdelisle@gcc.gnu> PR libfortran/61173 * io/list_read.c (eat_spaces): If the next character pointed to is a space, don't seek, must be at the end. From-SVN: r210898
This commit is contained in:
parent
63cbc2d48f
commit
03c0f19520
|
@ -1,3 +1,9 @@
|
|||
2014-05-23 Jerry DeLisle <jvdelisle@gcc.gnu>
|
||||
|
||||
PR libfortran/61173
|
||||
* io/list_read.c (eat_spaces): If the next character pointed to
|
||||
is a space, don't seek, must be at the end.
|
||||
|
||||
2014-05-23 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* configure.ac [with_newlib] (HAVE_STRNLEN, HAVE_STRNDUP): Define.
|
||||
|
|
|
@ -398,7 +398,7 @@ eat_spaces (st_parameter_dt *dtp)
|
|||
if (is_array_io (dtp))
|
||||
{
|
||||
gfc_offset offset = stell (dtp->u.p.current_unit->s);
|
||||
gfc_offset limit = dtp->u.p.current_unit->bytes_left;
|
||||
gfc_offset limit = offset + dtp->u.p.current_unit->bytes_left;
|
||||
|
||||
if (dtp->common.unit) /* kind=4 */
|
||||
{
|
||||
|
@ -410,13 +410,15 @@ eat_spaces (st_parameter_dt *dtp)
|
|||
offset += (sizeof (gfc_char4_t));
|
||||
dtp->u.p.current_unit->bytes_left--;
|
||||
}
|
||||
while (offset < limit && (cc == (gfc_char4_t)' '
|
||||
|| cc == (gfc_char4_t)'\t'));
|
||||
while (offset < limit && cc == (gfc_char4_t)' ');
|
||||
/* Back up, seek ahead, and fall through to complete the
|
||||
process so that END conditions are handled correctly. */
|
||||
dtp->u.p.current_unit->bytes_left++;
|
||||
sseek (dtp->u.p.current_unit->s,
|
||||
offset-(sizeof (gfc_char4_t)), SEEK_SET);
|
||||
|
||||
cc = dtp->internal_unit[offset];
|
||||
if (cc != (gfc_char4_t)' ')
|
||||
sseek (dtp->u.p.current_unit->s,
|
||||
offset-(sizeof (gfc_char4_t)), SEEK_SET);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -425,11 +427,13 @@ eat_spaces (st_parameter_dt *dtp)
|
|||
c = dtp->internal_unit[offset++];
|
||||
dtp->u.p.current_unit->bytes_left--;
|
||||
}
|
||||
while (offset < limit && (c == ' ' || c == '\t'));
|
||||
while (offset < limit && c == ' ');
|
||||
/* Back up, seek ahead, and fall through to complete the
|
||||
process so that END conditions are handled correctly. */
|
||||
dtp->u.p.current_unit->bytes_left++;
|
||||
sseek (dtp->u.p.current_unit->s, offset-1, SEEK_SET);
|
||||
|
||||
if (dtp->internal_unit[offset] != ' ')
|
||||
sseek (dtp->u.p.current_unit->s, offset - 1, SEEK_SET);
|
||||
}
|
||||
}
|
||||
/* Now skip spaces, EOF and EOL are handled in next_char. */
|
||||
|
|
Loading…
Reference in New Issue