+2010-03-17 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/43265
+ * io/io.h: Delete prototype for read_sf, making it static.
+ * io/read.c (read_x): Modify to call hit_eof if PAD="no".
+ * io/transfer.c (read_sf_internal): New static function extracted from
+ read_sf for use on internal units only. Handle empty string case.
+ (read_sf): New factoring of this function, make it static. Add special
+ conditions for EOF based on ADVANCE="no", PAD="no", and whether any
+ bytes have been previously read from the record.
+ (read_block_form): Modify to call read_sf or read_sf_internal.
+ (next_record_r): Add a done flag similar to next_record_w. Call hit_eof
+ if internal array unit next record returns finished, meaning an EOF was
+ found and not done, ie not the last record expected. For external
+ units call hit_eof if item_count is 1 or there are no pending spaces.
+ (next_record): Update call to next_record_r.
+
2010-03-12 Kai Tietz <kai.tietz@onevision.com>
PR/42950
/* Read sequential file - internal unit */
-static char *
+char *
+read_sf_internal (st_parameter_dt *dtp, int * length);
+char *
read_sf_internal (st_parameter_dt *dtp, int * length)
{
static char *empty_string[0];
{
if (errno != 0)
generate_error (&dtp->common, LIBERROR_OS, NULL);
- else
- {
- if (is_stream_io (dtp)
- || dtp->u.p.current_unit->pad_status == PAD_NO
- || dtp->u.p.current_unit->bytes_left
- == dtp->u.p.current_unit->recl)
- hit_eof (dtp);
- }
+ else if (dtp->u.p.item_count == 1
+ || dtp->u.p.pending_spaces == 0)
+ hit_eof (dtp);
break;
}