flashrom: Check return value of fscanf()/fwrite()/fread()
authorPeter Stuge <peter@stuge.se>
Mon, 12 Jan 2009 21:00:35 +0000 (21:00 +0000)
committerPeter Stuge <peter@stuge.se>
Mon, 12 Jan 2009 21:00:35 +0000 (21:00 +0000)
Fix build error on distros with warn_unused_result attributes in glibc.

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Yul Rottmann <yulrottmann@bitel.net>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3857 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/flashrom/flashrom.c
util/flashrom/layout.c

index 623ce7f05db7d005eead1a95c252054e54ea2839..9c8db6e6bd90ece7c3be6cc8075fdd9b1ebd37b2 100644 (file)
@@ -296,7 +296,7 @@ void print_version(void)
 int main(int argc, char *argv[])
 {
        uint8_t *buf;
-       unsigned long size;
+       unsigned long size, numbytes;
        uint32_t erasedbytes;
        FILE *image;
        /* Probe for up to three flash chips. */
@@ -517,11 +517,11 @@ int main(int argc, char *argv[])
                                       exclude_end_position -
                                       exclude_start_position);
 
-                       fwrite(buf, sizeof(char), size, image);
+                       numbytes = fwrite(buf, 1, size, image);
                        fclose(image);
-                       printf("done.\n");
+                       printf("%s.\n", numbytes == size ? "done" : "FAILED");
                        free(buf);
-                       exit(0);
+                       return numbytes != size;
                }
                // FIXME: flash writes stay enabled!
                exit(1);
@@ -615,9 +615,11 @@ int main(int argc, char *argv[])
                        memset(buf + exclude_start_position, 0,
                               exclude_end_position - exclude_start_position);
 
-               fwrite(buf, sizeof(char), size, image);
+               numbytes = fwrite(buf, 1, size, image);
                fclose(image);
-               printf("done.\n");
+               printf("%s.\n", numbytes == size ? "done" : "FAILED");
+               if (numbytes != size)
+                       return 1;
        } else {
                struct stat image_stat;
 
@@ -634,9 +636,13 @@ int main(int argc, char *argv[])
                        exit(1);
                }
 
-               fread(buf, sizeof(char), size, image);
+               numbytes = fread(buf, 1, size, image);
                show_id(buf, size, force);
                fclose(image);
+               if (numbytes != size) {
+                       fprintf(stderr, "Error: Failed to read file. Got %ld bytes, wanted %ld!\n", numbytes, size);
+                       return 1;
+               }
        }
 
        /* exclude range stuff. Nice idea, but at the moment it is only
index e2be12e9a90492ac32482ce124862c0530586768..84a8ec70525bbae04906b1f648aeb80af884e439 100644 (file)
@@ -146,8 +146,8 @@ int read_romlayout(char *name)
 
        while (!feof(romlayout)) {
                char *tstr1, *tstr2;
-               fscanf(romlayout, "%s %s\n", tempstr,
-                      rom_entries[romimages].name);
+               if (2 != fscanf(romlayout, "%s %s\n", tempstr, rom_entries[romimages].name))
+                       continue;
 #if 0
                // fscanf does not like arbitrary comments like that :( later
                if (tempstr[0] == '#') {