From: Jerry DeLisle Date: Wed, 28 Sep 2016 19:38:03 +0000 (+0000) Subject: re PR fortran/77707 (formatted direct access: nextrec off by one) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b89f743da8da9cc4884225cb30570c755026d79f;p=gcc.git re PR fortran/77707 (formatted direct access: nextrec off by one) 2016-09-28 Jerry DeLisle PR libgfortran/77707 io/transfer.c (next_record): Flush before calculating next_record. Correctly calculate. From-SVN: r240592 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f312a066c18..c58ad5d0ca0 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2016-09-28 Jerry DeLisle + + PR libgfortran/77707 + io/transfer.c (next_record): Flush before calculating next_record. + Correctly calculate. + 2016-09-23 Jerry DeLisle PR libgfortran/48298 diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 6009c123d71..902c02011ae 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -3720,6 +3720,8 @@ next_record (st_parameter_dt *dtp, int done) else next_record_w (dtp, done); + fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode); + if (!is_stream_io (dtp)) { /* Since we have changed the position, set it to unspecified so @@ -3733,8 +3735,8 @@ next_record (st_parameter_dt *dtp, int done) fp = stell (dtp->u.p.current_unit->s); /* Calculate next record, rounding up partial records. */ dtp->u.p.current_unit->last_record = - (fp + dtp->u.p.current_unit->recl - 1) / - dtp->u.p.current_unit->recl; + (fp + dtp->u.p.current_unit->recl) / + dtp->u.p.current_unit->recl - 1; } else dtp->u.p.current_unit->last_record++; @@ -3743,7 +3745,6 @@ next_record (st_parameter_dt *dtp, int done) if (!done) pre_position (dtp); - fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode); smarkeor (dtp->u.p.current_unit->s); }