From 7c32549e5729741383aa482b29f45cf69bcf6740 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Sat, 29 Aug 2015 15:38:39 +0000 Subject: re PR fortran/67367 (Program crashes on READ(IOSTAT=IOS, ...) on directory OPEN()ed without error) 2015-08-29 Jerry DeLisle PR libgfortran/67367 * io/unix.c (buf_read): Check for error condition and if found return the error code. From-SVN: r227320 --- libgfortran/io/unix.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'libgfortran/io/unix.c') diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index aa2feab..fd5f277 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -518,16 +518,26 @@ buf_read (unix_stream * s, void * buf, ssize_t nbyte) if (to_read <= BUFFER_SIZE/2) { did_read = raw_read (s, s->buffer, BUFFER_SIZE); - s->physical_offset += did_read; - s->active = did_read; - did_read = (did_read > to_read) ? to_read : did_read; - memcpy (p, s->buffer, did_read); + if (likely (did_read >= 0)) + { + s->physical_offset += did_read; + s->active = did_read; + did_read = (did_read > to_read) ? to_read : did_read; + memcpy (p, s->buffer, did_read); + } + else + return did_read; } else { did_read = raw_read (s, p, to_read); - s->physical_offset += did_read; - s->active = 0; + if (likely (did_read >= 0)) + { + s->physical_offset += did_read; + s->active = 0; + } + else + return did_read; } nbyte = did_read + nread; } -- cgit v1.1