- while (fread(buf, 1, sizeof(buf), f) > 0) { }
+ int bytes_left = opt_blocksize > 0 ? opt_blocksize : opt_filesize;
+ while (bytes_left > 0) {
+ size_t read = fread(buf, 1, bytes_left < sizeof(buf)
+ ? bytes_left : sizeof(buf), f);
+ if (ferror(f))
+ return;
+ bytes_left -= read;
+ }