re PR libfortran/31099 (Runtime error on legal code using RECL)
2007-03-09 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/31099 * io/open.c (new_unit): Initialize bytes_left and recl_subrecord. * io/transfer.c (next_record_w): Set bytes left to record length for sequential unformatted I/O. (next_record_r): Ditto. (read_block_direct): Fix test for exceeding bytes_left. From-SVN: r122763
This commit is contained in:
parent
7cd4f641a0
commit
f4072316a3
3 changed files with 16 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
|||
2007-03-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libgfortran/31099
|
||||
* io/open.c (new_unit): Initialize bytes_left and recl_subrecord.
|
||||
* io/transfer.c (next_record_w): Set bytes left to record length for
|
||||
sequential unformatted I/O.
|
||||
(next_record_r): Ditto.
|
||||
(read_block_direct): Fix test for exceeding bytes_left.
|
||||
|
||||
2007-03-08 Daniel Franke <franke.daniel@gmail.com>
|
||||
|
||||
PR fortran/30947
|
||||
|
|
|
@ -437,6 +437,8 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
|
|||
{
|
||||
u->flags.has_recl = 1;
|
||||
u->recl = opp->recl_in;
|
||||
u->recl_subrecord = u->recl;
|
||||
u->bytes_left = u->recl;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -434,11 +434,10 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
|
|||
|
||||
/* Check whether we exceed the total record length. */
|
||||
|
||||
if (dtp->u.p.current_unit->flags.has_recl)
|
||||
if (dtp->u.p.current_unit->flags.has_recl
|
||||
&& (*nbytes > (size_t) dtp->u.p.current_unit->bytes_left))
|
||||
{
|
||||
to_read_record =
|
||||
*nbytes > (size_t) dtp->u.p.current_unit->bytes_left ?
|
||||
*nbytes : (size_t) dtp->u.p.current_unit->bytes_left;
|
||||
to_read_record = (size_t) dtp->u.p.current_unit->bytes_left;
|
||||
short_record = 1;
|
||||
}
|
||||
else
|
||||
|
@ -2152,6 +2151,7 @@ next_record_r (st_parameter_dt *dtp)
|
|||
|
||||
case UNFORMATTED_SEQUENTIAL:
|
||||
next_record_r_unf (dtp, 1);
|
||||
dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
|
||||
break;
|
||||
|
||||
case FORMATTED_DIRECT:
|
||||
|
@ -2377,6 +2377,7 @@ next_record_w (st_parameter_dt *dtp, int done)
|
|||
|
||||
case UNFORMATTED_SEQUENTIAL:
|
||||
next_record_w_unf (dtp, 0);
|
||||
dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
|
||||
break;
|
||||
|
||||
case FORMATTED_STREAM:
|
||||
|
|
Loading…
Add table
Reference in a new issue