re PR libfortran/24489 (read_block wrong execution order)
2005-10-23 Jerry DeLisle <jvdelisle@verizon.net> PR libgfortran/24489 * io/transfer.c (read_block): Change the order of execution to not read past end-of-record. (read_block_direct): Same change. From-SVN: r105840
This commit is contained in:
parent
9da7372540
commit
835681c8a2
@ -1,3 +1,10 @@
|
||||
2005-10-23 Jerry DeLisle <jvdelisle@verizon.net>
|
||||
|
||||
PR libgfortran/24489
|
||||
* io/transfer.c (read_block): Change the order of execution to not read
|
||||
past end-of-record.
|
||||
(read_block_direct): Same change.
|
||||
|
||||
2005-10-23 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR libfortran/23272
|
||||
|
@ -248,10 +248,6 @@ read_block (int *length)
|
||||
char *source;
|
||||
int nread;
|
||||
|
||||
if (current_unit->flags.form == FORM_FORMATTED &&
|
||||
current_unit->flags.access == ACCESS_SEQUENTIAL)
|
||||
return read_sf (length); /* Special case. */
|
||||
|
||||
if (current_unit->bytes_left < *length)
|
||||
{
|
||||
if (current_unit->flags.pad == PAD_NO)
|
||||
@ -262,6 +258,10 @@ read_block (int *length)
|
||||
|
||||
*length = current_unit->bytes_left;
|
||||
}
|
||||
|
||||
if (current_unit->flags.form == FORM_FORMATTED &&
|
||||
current_unit->flags.access == ACCESS_SEQUENTIAL)
|
||||
return read_sf (length); /* Special case. */
|
||||
|
||||
current_unit->bytes_left -= *length;
|
||||
|
||||
@ -295,15 +295,6 @@ read_block_direct (void * buf, size_t * nbytes)
|
||||
void *data;
|
||||
size_t nread;
|
||||
|
||||
if (current_unit->flags.form == FORM_FORMATTED &&
|
||||
current_unit->flags.access == ACCESS_SEQUENTIAL)
|
||||
{
|
||||
length = (int*) nbytes;
|
||||
data = read_sf (length); /* Special case. */
|
||||
memcpy (buf, data, (size_t) *length);
|
||||
return;
|
||||
}
|
||||
|
||||
if (current_unit->bytes_left < *nbytes)
|
||||
{
|
||||
if (current_unit->flags.pad == PAD_NO)
|
||||
@ -315,6 +306,15 @@ read_block_direct (void * buf, size_t * nbytes)
|
||||
*nbytes = current_unit->bytes_left;
|
||||
}
|
||||
|
||||
if (current_unit->flags.form == FORM_FORMATTED &&
|
||||
current_unit->flags.access == ACCESS_SEQUENTIAL)
|
||||
{
|
||||
length = (int*) nbytes;
|
||||
data = read_sf (length); /* Special case. */
|
||||
memcpy (buf, data, (size_t) *length);
|
||||
return;
|
||||
}
|
||||
|
||||
current_unit->bytes_left -= *nbytes;
|
||||
|
||||
nread = *nbytes;
|
||||
|
Loading…
Reference in New Issue
Block a user