OSDN Git Service

PR libfortran/16436
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Jun 2005 22:13:26 +0000 (22:13 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Jun 2005 22:13:26 +0000 (22:13 +0000)
* io/transfer.c (read_sf): Correct updating of bytes_left field.
(formatted_transfer): Correct updating of bytes_left field and
reformatting code (comments and whitespace).
* io/unix.c (move_pos_offset): "active" field should not be
changed here. Whitespace corrections.
* gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101100 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
libgfortran/ChangeLog
libgfortran/io/transfer.c
libgfortran/io/unix.c

index 09f9d71..f03b329 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/16436
+       * gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.
+
 2005-06-16  Richard Guenther  <rguenth@gcc.gnu.org>
 
        * gcc.target/i386/attributes-error.c: New testcase.
index 6abd196..2314080 100644 (file)
@@ -3,7 +3,7 @@ C      (ANSI X3.9-1978 Section 13.5.3.2)
 C
 C Origin: David Billinghurst <David.Billinghurst@riotinto.com>
 C
-C { dg-do run {xfail *-*-*} } gfortran PR 16436
+C { dg-do run }
       integer i,j
       real a,b,c,d,e
       character*32 in
index 6419706..0467cb1 100644 (file)
@@ -1,3 +1,12 @@
+2005-06-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/16436
+       * io/transfer.c (read_sf): Correct updating of bytes_left field.
+       (formatted_transfer): Correct updating of bytes_left field and
+       reformatting code (comments and whitespace).
+       * io/unix.c (move_pos_offset): "active" field should not be
+       changed here. Whitespace corrections.
+
 2005-06-15  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR libfortran/21950
index 46bec83..c81cb47 100644 (file)
@@ -160,7 +160,6 @@ read_sf (int *length)
       return base;
     }
 
-  current_unit->bytes_left = options.default_recl;
   readlen = 1;
   n = 0;
 
@@ -214,6 +213,7 @@ read_sf (int *length)
       sf_seen_eor = 0;
     }
   while (n < *length);
+  current_unit->bytes_left -= *length;
 
   if (ioparm.size != NULL)
     *ioparm.size += *length;
@@ -675,22 +675,19 @@ formatted_transfer (bt type, void *p, int len)
 
         case FMT_TL:
         case FMT_T:
-           if (f->format==FMT_TL)
-             {
-                pos = f->u.n ;
-                pos= current_unit->recl - current_unit->bytes_left - pos;
-             }
-           else // FMT==T
+           if (f->format == FMT_TL)
+             pos = current_unit->recl - current_unit->bytes_left - f->u.n;
+           else /* FMT_T */
              {
-                consume_data_flag = 0 ;
-                pos = f->u.n - 1;
+               consume_data_flag = 0;
+               pos = f->u.n - 1;
              }
 
            if (pos < 0 || pos >= current_unit->recl )
-           {
-             generate_error (ERROR_EOR, "T Or TL edit position error");
-             break ;
-            }
+             {
+               generate_error (ERROR_EOR, "T Or TL edit position error");
+               break ;
+             }
             m = pos - (current_unit->recl - current_unit->bytes_left);
 
             if (m == 0)
@@ -707,6 +704,7 @@ formatted_transfer (bt type, void *p, int len)
             if (m < 0)
              {
                move_pos_offset (current_unit->s,m);
+              current_unit->bytes_left -= m;
              }
 
          break;
index f82ffa7..f4ee889 100644 (file)
@@ -154,26 +154,22 @@ move_pos_offset (stream* st, int pos_off)
   unix_stream * str = (unix_stream*)st;
   if (pos_off < 0)
     {
-      str->active  += pos_off;
-      if (str->active < 0)
-         str->active = 0;
+      str->logical_offset += pos_off;
 
-      str->logical_offset  += pos_off;
-
-      if (str->dirty_offset+str->ndirty > str->logical_offset)
+      if (str->dirty_offset + str->ndirty > str->logical_offset)
         {
-          if (str->ndirty +  pos_off > 0)
-            str->ndirty += pos_off ;
+          if (str->ndirty + pos_off > 0)
+            str->ndirty += pos_off;
           else
             {
               str->dirty_offset +=  pos_off + pos_off;
-              str->ndirty = 0 ;
+              str->ndirty = 0;
             }
         }
 
-    return pos_off ;
+    return pos_off;
   }
-  return 0 ;
+  return 0;
 }