diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f | 2 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 9 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 24 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 18 |
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; } |