[coreboot] r3857 - trunk/util/flashrom

svn at coreboot.org svn at coreboot.org
Mon Jan 12 22:00:35 CET 2009


Author: stuge
Date: 2009-01-12 22:00:35 +0100 (Mon, 12 Jan 2009)
New Revision: 3857

Modified:
   trunk/util/flashrom/flashrom.c
   trunk/util/flashrom/layout.c
Log:
flashrom: Check return value of fscanf()/fwrite()/fread()

Fix build error on distros with warn_unused_result attributes in glibc.

Signed-off-by: Peter Stuge <peter at stuge.se>
Acked-by: Yul Rottmann <yulrottmann at bitel.net>


Modified: trunk/util/flashrom/flashrom.c
===================================================================
--- trunk/util/flashrom/flashrom.c	2009-01-12 16:16:08 UTC (rev 3856)
+++ trunk/util/flashrom/flashrom.c	2009-01-12 21:00:35 UTC (rev 3857)
@@ -296,7 +296,7 @@
 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 @@
 				       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 @@
 			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 @@
 			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

Modified: trunk/util/flashrom/layout.c
===================================================================
--- trunk/util/flashrom/layout.c	2009-01-12 16:16:08 UTC (rev 3856)
+++ trunk/util/flashrom/layout.c	2009-01-12 21:00:35 UTC (rev 3857)
@@ -146,8 +146,8 @@
 
 	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] == '#') {





More information about the coreboot mailing list