Browse Source

firmware-utils: mkdlinkfw: fix error handling

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 <[email protected]>
Mathias Kresin 6 years ago
parent
commit
0e78af22d9
1 changed files with 3 additions and 3 deletions
  1. 3 3
      tools/firmware-utils/src/mkdlinkfw-lib.c

+ 3 - 3
tools/firmware-utils/src/mkdlinkfw-lib.c

@@ -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;
 	}