diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 5ce87028e72338300e4b35949c1f5199c60486a3..d5e178ed9f310e947150b40b50a0372cb3219f70 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2006-01-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/25631 + * io/transfer.c (formatted_transfer_scalar): Adjust pending_spaces and + skips so that TL works correctly when no bytes_used yet. + 2006-01-16 Roger Sayle <roger@eyesopen.com> * configure.ac (CFLAGS): Update to include -std=gnu99 so that diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 049ebb24771981fcd14e1f30c28da60c8e0b89e5..729883586f87d7350ca84ca55170eb290f328f46 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -868,7 +868,21 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len, case FMT_TL: case FMT_T: if (f->format == FMT_TL) - pos = bytes_used - f->u.n; + { + + /* Handle the special case when no bytes have been used yet. + Cannot go below zero. */ + if (bytes_used == 0) + { + dtp->u.p.pending_spaces -= f->u.n; + dtp->u.p.pending_spaces = dtp->u.p.pending_spaces < 0 ? 0 + : dtp->u.p.pending_spaces; + dtp->u.p.skips -= f->u.n; + dtp->u.p.skips = dtp->u.p.skips < 0 ? 0 : dtp->u.p.skips; + } + + pos = bytes_used - f->u.n; + } else /* FMT_T */ { consume_data_flag = 0;