Need to check ferror(), not return value. Thanks to Alex Polvi.
ofp = *fp;
while ((n = fread(bit, sizeof(struct blk_io_trace), 1, ifp)) == 1) {
+ if (ferror(ifp)) {
+ clearerr(ifp);
+ perror("fread");
+ break;
+ }
if (data_is_native == -1)
check_data_endianness(bit->magic);
if (!buf_len)
return 0;
- while (1) {
- ret = fwrite(buf, buf_len, 1, tip->ofile);
- if (ret == 1)
- break;
-
- if (ret < 0) {
- perror("write");
- return 1;
- }
+ ret = fwrite(buf, buf_len, 1, tip->ofile);
+ if (ferror(tip->ofile) || ret != 1) {
+ perror("fwrite");
+ clearerr(tip->ofile);
+ return 1;
}
if (tip->ofile_stdout)