firmware-utils: mkdlinkfw: fix error handling
authorMathias Kresin <dev@kresin.me>
Sat, 5 Jan 2019 06:40:55 +0000 (07:40 +0100)
committerMathias Kresin <dev@kresin.me>
Sun, 13 Jan 2019 17:31:10 +0000 (18:31 +0100)
fread() doesn't set errno, ferror need to be used to check for errors.
While at it, check if we read the expect number of elements.

Signed-off-by: Mathias Kresin <dev@kresin.me>
src/mkdlinkfw-lib.c

index 3b71fda7db4196f42d69f07539667266ce23d0f9..b3f3f41348527f05e86509cedccb892149a974b2 100644 (file)
@@ -97,6 +97,7 @@ int read_to_buf(const struct file_info *fdata, char *buf)
 {
        FILE *f;
        int ret = EXIT_FAILURE;
+       size_t read;
 
        f = fopen(fdata->file_name, "r");
        if (f == NULL) {
@@ -104,9 +105,8 @@ int read_to_buf(const struct file_info *fdata, char *buf)
                goto out;
        }
 
-       errno = 0;
-       fread(buf, fdata->file_size, 1, f);
-       if (errno != 0) {
+       read = fread(buf, fdata->file_size, 1, f);
+       if (ferror(f) || read != 1) {
                ERRS("unable to read from file \"%s\"", fdata->file_name);
                goto out_close;
        }