summaryrefslogtreecommitdiff
path: root/ff2jpg.c
diff options
context:
space:
mode:
authorAlexander Krotov <ilabdsf@yandex.ru>2016-05-19 01:21:58 +0300
committerFRIGN <dev@frign.de>2016-05-19 12:55:45 +0200
commit3fa775e1dfd5dc38648f88c2f385be1f0fe45605 (patch)
treec54c26287920107c018b0a347971f17cf9dc4713 /ff2jpg.c
parentc494437937ee01c6d3eb5b630a15e207aae76c25 (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.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ff2jpg.c b/ff2jpg.c
index 3da35e2..6f88a23 100644
--- a/ff2jpg.c
+++ b/ff2jpg.c
@@ -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;
}