]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Check for fread failure 1907/head
authorPeter Lesslie <pclesslie@gmail.com>
Wed, 27 Nov 2019 01:36:33 +0000 (19:36 -0600)
committerPeter Lesslie <pclesslie@gmail.com>
Wed, 27 Nov 2019 02:47:58 +0000 (20:47 -0600)
On failure fread may return either a short read or 0. Need to use
ferror to detect error versus eof.

programs/fileio.c

index a45dedc464fab081528c37ce0e2aa26529295989..8fc25d357d52ce46aba3dd1ecb43556ee7b4d9c5 100644 (file)
@@ -1769,7 +1769,7 @@ static int FIO_passThrough(const FIO_prefs_t* const prefs,
                            size_t alreadyLoaded)
 {
     size_t const blockSize = MIN(64 KB, bufferSize);
-    size_t readFromInput = 1;
+    size_t readFromInput;
     unsigned storedSkips = 0;
 
     /* assumption : ress->srcBufferLoaded bytes already loaded and stored within buffer */
@@ -1779,10 +1779,15 @@ static int FIO_passThrough(const FIO_prefs_t* const prefs,
             return 1;
     }   }
 
-    while (readFromInput) {
+    do {
         readFromInput = fread(buffer, 1, blockSize, finput);
         storedSkips = FIO_fwriteSparse(prefs, foutput, buffer, readFromInput, storedSkips);
+    } while (readFromInput == blockSize);
+    if (ferror(finput)) {
+        DISPLAYLEVEL(1, "Pass-through read error : %s\n", strerror(errno));
+        return 1;
     }
+    assert(feof(finput));
 
     FIO_fwriteSparseEnd(prefs, foutput, storedSkips);
     return 0;