diff options
author | Alexander Krotov <ilabdsf@yandex.ru> | 2016-05-19 01:21:58 +0300 |
---|---|---|
committer | FRIGN <dev@frign.de> | 2016-05-19 12:55:45 +0200 |
commit | 3fa775e1dfd5dc38648f88c2f385be1f0fe45605 (patch) | |
tree | c54c26287920107c018b0a347971f17cf9dc4713 /ff2jpg.c | |
parent | c494437937ee01c6d3eb5b630a15e207aae76c25 (diff) |
Improve fread error handling in ff2*
In case of unexpected end of file errno is not set, and strerror(errno)
returns "Success". Caller should distinguish between error and EOF by
calling ferror(3) as described in fread(3).
Diffstat (limited to 'ff2jpg.c')
-rw-r--r-- | ff2jpg.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -80,8 +80,7 @@ main(int argc, char *argv[]) /* header */ if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) { - fprintf(stderr, "%s: fread: %s\n", argv0, strerror(errno)); - return 1; + goto readerr; } if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) { fprintf(stderr, "%s: invalid magic value\n", argv0); @@ -124,8 +123,7 @@ main(int argc, char *argv[]) /* write rows */ for (i = 0; i < height; ++i) { if (fread(row, sizeof(uint16_t), rowlen, stdin) != rowlen) { - fprintf(stderr, "%s: fread: %s\n", argv0, strerror(errno)); - return 1; + goto readerr; } for (j = 0, k = 0; j < rowlen; j += 4, k += 3) { a = ntohs(row[j + 3]); @@ -142,4 +140,12 @@ main(int argc, char *argv[]) jpeg_destroy_compress(&cinfo); return 0; +readerr: + if (ferror(stdin)) { + fprintf(stderr, "%s: fread: %s\n", argv0, strerror(errno)); + } else { + fprintf(stderr, "%s: unexpected end of file\n", argv0); + } + + return 1; } |