aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f2
-rw-r--r--libgfortran/ChangeLog9
-rw-r--r--libgfortran/io/transfer.c24
-rw-r--r--libgfortran/io/unix.c18
5 files changed, 33 insertions, 25 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 09f9d71..f03b329 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f b/gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
index 6abd196..2314080 100644
--- a/gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
+++ b/gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
@@ -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
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6419706..0467cb1 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 46bec83..c81cb47 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -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;
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index f82ffa7..f4ee889 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -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;
}