Commit 2f06ccc6 by Francois-Xavier Coudert Committed by François-Xavier Coudert

re PR libfortran/16436 (gfortran TL edit descriptor failure - test f77-edit-t-in.f)

	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.
	* gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.

From-SVN: r101100
parent 0518582d
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> 2005-06-16 Richard Guenther <rguenth@gcc.gnu.org>
* gcc.target/i386/attributes-error.c: New testcase. * gcc.target/i386/attributes-error.c: New testcase.
......
...@@ -3,7 +3,7 @@ C (ANSI X3.9-1978 Section 13.5.3.2) ...@@ -3,7 +3,7 @@ C (ANSI X3.9-1978 Section 13.5.3.2)
C C
C Origin: David Billinghurst <David.Billinghurst@riotinto.com> C Origin: David Billinghurst <David.Billinghurst@riotinto.com>
C C
C { dg-do run {xfail *-*-*} } gfortran PR 16436 C { dg-do run }
integer i,j integer i,j
real a,b,c,d,e real a,b,c,d,e
character*32 in character*32 in
......
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> 2005-06-15 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/21950 PR libfortran/21950
......
...@@ -160,7 +160,6 @@ read_sf (int *length) ...@@ -160,7 +160,6 @@ read_sf (int *length)
return base; return base;
} }
current_unit->bytes_left = options.default_recl;
readlen = 1; readlen = 1;
n = 0; n = 0;
...@@ -214,6 +213,7 @@ read_sf (int *length) ...@@ -214,6 +213,7 @@ read_sf (int *length)
sf_seen_eor = 0; sf_seen_eor = 0;
} }
while (n < *length); while (n < *length);
current_unit->bytes_left -= *length;
if (ioparm.size != NULL) if (ioparm.size != NULL)
*ioparm.size += *length; *ioparm.size += *length;
...@@ -675,22 +675,19 @@ formatted_transfer (bt type, void *p, int len) ...@@ -675,22 +675,19 @@ formatted_transfer (bt type, void *p, int len)
case FMT_TL: case FMT_TL:
case FMT_T: case FMT_T:
if (f->format==FMT_TL) if (f->format == FMT_TL)
{ pos = current_unit->recl - current_unit->bytes_left - f->u.n;
pos = f->u.n ; else /* FMT_T */
pos= current_unit->recl - current_unit->bytes_left - pos;
}
else // FMT==T
{ {
consume_data_flag = 0 ; consume_data_flag = 0;
pos = f->u.n - 1; pos = f->u.n - 1;
} }
if (pos < 0 || pos >= current_unit->recl ) if (pos < 0 || pos >= current_unit->recl )
{ {
generate_error (ERROR_EOR, "T Or TL edit position error"); generate_error (ERROR_EOR, "T Or TL edit position error");
break ; break ;
} }
m = pos - (current_unit->recl - current_unit->bytes_left); m = pos - (current_unit->recl - current_unit->bytes_left);
if (m == 0) if (m == 0)
...@@ -707,6 +704,7 @@ formatted_transfer (bt type, void *p, int len) ...@@ -707,6 +704,7 @@ formatted_transfer (bt type, void *p, int len)
if (m < 0) if (m < 0)
{ {
move_pos_offset (current_unit->s,m); move_pos_offset (current_unit->s,m);
current_unit->bytes_left -= m;
} }
break; break;
......
...@@ -154,26 +154,22 @@ move_pos_offset (stream* st, int pos_off) ...@@ -154,26 +154,22 @@ move_pos_offset (stream* st, int pos_off)
unix_stream * str = (unix_stream*)st; unix_stream * str = (unix_stream*)st;
if (pos_off < 0) if (pos_off < 0)
{ {
str->active += pos_off; str->logical_offset += pos_off;
if (str->active < 0)
str->active = 0;
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) if (str->ndirty + pos_off > 0)
str->ndirty += pos_off ; str->ndirty += pos_off;
else else
{ {
str->dirty_offset += pos_off + pos_off; str->dirty_offset += pos_off + pos_off;
str->ndirty = 0 ; str->ndirty = 0;
} }
} }
return pos_off ; return pos_off;
} }
return 0 ; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment