re PR libfortran/92100 (Formatted stream IO irreproducible read with binary data...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 24 Nov 2019 22:14:59 +0000 (22:14 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 24 Nov 2019 22:14:59 +0000 (22:14 +0000)
2019-11-24  Jerry DeLisle  <jvdelisle@gcc.ngu.org>

PR fortran/92100
io/transfer.c (data_transfer_init_worker): Use fbuf_reset
instead of fbuf_flush before the seek. Note that fbuf_reset
calls fbuf_flush and adjusts fbuf pointers.

From-SVN: r278660

libgfortran/ChangeLog
libgfortran/io/transfer.c

index 46b96f25f1699e42e86cc9f95947f82966cde514..91768c0a00f16f72b8b5a68a7e08633f3d7c7e0b 100644 (file)
@@ -1,3 +1,10 @@
+2019-11-24  Jerry DeLisle  <jvdelisle@gcc.ngu.org>
+
+       PR fortran/92100
+       io/transfer.c (data_transfer_init_worker): Use fbuf_reset
+       instead of fbuf_flush before the seek. Note that fbuf_reset
+       calls fbuf_flush and adjusts fbuf pointers.
+
 2019-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
        Harald Anlauf <anlauf@gmx.de>
 
index 89f0abe9938920b385a8f5c03cfaa70b3938f467..43b22bf5f8da5440833e1780160b3d5ec659d2a8 100644 (file)
@@ -3309,8 +3309,9 @@ data_transfer_init_worker (st_parameter_dt *dtp, int read_flag)
 
           if (dtp->pos != dtp->u.p.current_unit->strm_pos)
             {
-              fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
-              if (sseek (dtp->u.p.current_unit->s, dtp->pos - 1, SEEK_SET) < 0)
+             fbuf_reset (dtp->u.p.current_unit);
+             if (sseek (dtp->u.p.current_unit->s, dtp->pos - 1,
+                        SEEK_SET) < 0)
                 {
                   generate_error (&dtp->common, LIBERROR_OS, NULL);
                   return;