From 23f64cf5e7813900942c78e056bd16a5147a3041 Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Wed, 16 Dec 2009 09:04:40 +0000 Subject: [PATCH] fileRead: check result of fread --- ChangeLog | 6 ++++++ src/binary.c | 15 ++++++++------- src/file.c | 22 ++++++++++++++++++++-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3124514fe..1c749ecfb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-12-15 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de> + + * fileRead: check result of fread + * binReadF77Block: check result of fileRead + * Version 1.4.1 released + 2009-12-11 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de> * streamSync: check that vlist has variables to sync [report: Martin Schultz] diff --git a/src/binary.c b/src/binary.c index 6df811d58..65011dc71 100644 --- a/src/binary.c +++ b/src/binary.c @@ -67,14 +67,15 @@ UINT64 get_SUINT64(unsigned char *x) size_t binReadF77Block(int fileID, int byteswap) { unsigned char f77block[4]; - size_t blocklen; + size_t blocklen = 0; - fileRead(fileID, f77block, 4); - - if ( byteswap ) - blocklen = get_SUINT32(f77block); - else - blocklen = get_UINT32(f77block); + if ( fileRead(fileID, f77block, 4) == 4 ) + { + if ( byteswap ) + blocklen = get_SUINT32(f77block); + else + blocklen = get_UINT32(f77block); + } return (blocklen); } diff --git a/src/file.c b/src/file.c index 027e0c94f..b78d1f1c8 100644 --- a/src/file.c +++ b/src/file.c @@ -1323,7 +1323,16 @@ size_t filePtrRead(void *vfileptr, void *ptr, size_t size) if ( fileptr->mode == 'r' && fileptr->type == FILE_TYPE_OPEN ) nread = file_read_from_buffer(fileptr, ptr, size); else - nread = fread(ptr, 1, size, fileptr->fp); + { + nread = fread(ptr, 1, size, fileptr->fp); + if ( nread != size ) + { + if ( nread == 0 ) + fileptr->flag |= FILE_EOF; + else + fileptr->flag |= FILE_ERROR; + } + } fileptr->position += nread; fileptr->byteTrans += nread; @@ -1349,7 +1358,16 @@ size_t fileRead(int fileID, void *ptr, size_t size) if ( fileptr->mode == 'r' && fileptr->type == FILE_TYPE_OPEN ) nread = file_read_from_buffer(fileptr, ptr, size); else - nread = fread(ptr, 1, size, fileptr->fp); + { + nread = fread(ptr, 1, size, fileptr->fp); + if ( nread != size ) + { + if ( nread == 0 ) + fileptr->flag |= FILE_EOF; + else + fileptr->flag |= FILE_ERROR; + } + } fileptr->position += nread; fileptr->byteTrans += nread; -- GitLab