re PR fortran/35632 (stream io broken on FreeBSD due to ftruncate changes.)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 22 Mar 2008 22:03:13 +0000 (22:03 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 22 Mar 2008 22:03:13 +0000 (22:03 +0000)
2008-03-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/35632
* io/transfer.c (data_transfer_init):  Fix whitespace.
(next_record_w): Truncate the file only if the stream
position is short of the file end.

From-SVN: r133454

libgfortran/ChangeLog
libgfortran/io/transfer.c

index c2bf6ca8e0d89d04553d48039a5c41307994c5f8..3ccccc98f46f9961cc0dc60b948518f02d3f0b7a 100644 (file)
@@ -1,3 +1,10 @@
+2008-03-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/35632
+       * io/transfer.c (data_transfer_init):  Fix whitespace.
+       (next_record_w): Truncate the file only if the stream
+       position is short of the file end.
+
 2008-03-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        * intrinsics/pack_generic.c:  Fix typo.
index c3e91149a27ad81889384328ac0349fb49b98c8a..5ccc95823a880e0012492df6f3757e1a7d3a5658 100644 (file)
@@ -1985,12 +1985,12 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
       if (dtp->u.p.mode == READING
          && dtp->u.p.current_unit->mode == WRITING
          && !is_internal_unit (dtp))
-        flush(dtp->u.p.current_unit->s);
+       flush(dtp->u.p.current_unit->s);
 
       /* Check whether the record exists to be read.  Only
         a partial record needs to exist.  */
 
-      if (dtp->u.p.mode == READING && (dtp->rec -1)
+      if (dtp->u.p.mode == READING && (dtp->rec - 1)
          * dtp->u.p.current_unit->recl >= file_length (dtp->u.p.current_unit->s))
        {
          generate_error (&dtp->common, LIBERROR_BAD_OPTION,
@@ -2604,7 +2604,9 @@ next_record_w (st_parameter_dt *dtp, int done)
          if (is_stream_io (dtp))
            {
              dtp->u.p.current_unit->strm_pos += len;
-             struncate(dtp->u.p.current_unit->s);
+             if (dtp->u.p.current_unit->strm_pos
+                 < file_length (dtp->u.p.current_unit->s))
+               struncate (dtp->u.p.current_unit->s);
            }
        }