diff mbox

[libgfortran] PR77707 formatted direct access: nextrec off by one

Message ID 60e46aee-a8c2-188e-2b65-ff2e83f794e0@charter.net
State New
Headers show

Commit Message

Jerry DeLisle Sept. 28, 2016, 5:15 a.m. UTC
I plan to commit the attached patch in the next few days. Fairly simple.

Regression tested on x86-64.

Regards,

Jerry

2016-09-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/77707
	io/transfer.c (next_record): Flush before calculating next_record.
	Correctly calculate.

Comments

Steve Kargl Sept. 28, 2016, 6:18 p.m. UTC | #1
On Tue, Sep 27, 2016 at 10:15:40PM -0700, Jerry DeLisle wrote:
> I plan to commit the attached patch in the next few days. Fairly simple.
> 
> Regression tested on x86-64.
> 

Looks ok to me.
diff mbox

Patch

diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 6009c123..902c0201 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);
 }