[coreboot-gerrit] Change in coreboot[master]: drivers/storage: Fix array references

Lee Leahy (Code Review) gerrit at coreboot.org
Wed May 10 22:31:38 CEST 2017


Lee Leahy has submitted this change and it was merged. ( https://review.coreboot.org/19643 )

Change subject: drivers/storage: Fix array references
......................................................................


drivers/storage: Fix array references

Fix bug detected by coverity to handle the zero capacity case.  Specific
changes:

* Reduce loop count by one to handle zero capacity case
* Use structure instead of dual arrays
* Move structures into display_capacity routine

Coverity Issues:
* 1374931
* 1374932
* 1374933
* 1374934

TEST=Build and run on Galileo Gen2

Change-Id: Ie5c96e78417b667438a00ee22c70894a00d13291
Signed-off-by: Lee Leahy <Leroy.P.Leahy at intel.com>
Reviewed-on: https://review.coreboot.org/19643
Tested-by: build bot (Jenkins) <no-reply at coreboot.org>
Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
M src/drivers/storage/storage.c
1 file changed, 31 insertions(+), 46 deletions(-)

Approvals:
  Aaron Durbin: Looks good to me, approved
  build bot (Jenkins): Verified



diff --git a/src/drivers/storage/storage.c b/src/drivers/storage/storage.c
index 57477f9..8d7692c 100644
--- a/src/drivers/storage/storage.c
+++ b/src/drivers/storage/storage.c
@@ -30,41 +30,9 @@
 #define DECIMAL_CAPACITY_MULTIPLIER	1000ULL
 #define HEX_CAPACITY_MULTIPLIER		1024ULL
 
-static const char * const hex_unit_name[] = {
-	"TiB", "GiB", "MiB", "KiB", "B"
-};
-static const char * const decimal_unit_name[] = {
-	"TB", "GB", "MB", "KB", "B"
-};
-
-static const uint64_t decimal_capacity_table[] = {
-	/* TB */
-	DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER
-		* DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER,
-	/* GB */
-	DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER
-		* DECIMAL_CAPACITY_MULTIPLIER,
-	/* MB */
-	DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER,
-	/* KB */
-	DECIMAL_CAPACITY_MULTIPLIER,
-	/* B */
-	1
-};
-
-static const uint64_t hex_capacity_table[] = {
-	/* TiB */
-	HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER
-		* HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER,
-	/* GiB */
-	HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER
-		* HEX_CAPACITY_MULTIPLIER,
-	/* MiB */
-	HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER,
-	/* KiB */
-	HEX_CAPACITY_MULTIPLIER,
-	/* B */
-	1
+struct capacity {
+	const char * const units;
+	uint64_t bytes;
 };
 
 static void display_capacity(struct storage_media *media, int partition_number)
@@ -77,6 +45,26 @@
 	int index;
 	const char *name;
 	const char *separator;
+	const struct capacity decimal_list[] = {
+		{"TB", DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER
+			* DECIMAL_CAPACITY_MULTIPLIER
+			* DECIMAL_CAPACITY_MULTIPLIER},
+		{"GB", DECIMAL_CAPACITY_MULTIPLIER * DECIMAL_CAPACITY_MULTIPLIER
+			* DECIMAL_CAPACITY_MULTIPLIER},
+		{"MB", DECIMAL_CAPACITY_MULTIPLIER
+			* DECIMAL_CAPACITY_MULTIPLIER},
+		{"KB", DECIMAL_CAPACITY_MULTIPLIER},
+		{"B", 1}
+	};
+	const struct capacity hex_list[] = {
+		{"TiB", HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER
+			* HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER},
+		{"GiB", HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER
+			* HEX_CAPACITY_MULTIPLIER},
+		{"MiB", HEX_CAPACITY_MULTIPLIER * HEX_CAPACITY_MULTIPLIER},
+		{"KiB", HEX_CAPACITY_MULTIPLIER},
+		{"B", 1}
+	};
 
 	/* Get the partition name */
 	capacity = media->capacity[partition_number];
@@ -86,23 +74,20 @@
 		separator = ": ";
 
 	/* Determine the decimal divisor for the capacity */
-	ASSERT(ARRAY_SIZE(decimal_capacity_table)
-		== ARRAY_SIZE(decimal_unit_name));
-	for (index = 0; index < ARRAY_SIZE(decimal_capacity_table); index++) {
-		if (capacity >= decimal_capacity_table[index])
+	for (index = 0; index < ARRAY_SIZE(decimal_list) - 1; index++) {
+		if (capacity >= decimal_list[index].bytes)
 			break;
 	}
-	decimal_divisor = decimal_capacity_table[index];
-	decimal_units = decimal_unit_name[index];
+	decimal_divisor = decimal_list[index].bytes;
+	decimal_units = decimal_list[index].units;
 
 	/* Determine the hex divisor for the capacity */
-	ASSERT(ARRAY_SIZE(hex_capacity_table) == ARRAY_SIZE(hex_unit_name));
-	for (index = 0; index < ARRAY_SIZE(hex_capacity_table); index++) {
-		if (capacity >= hex_capacity_table[index])
+	for (index = 0; index < ARRAY_SIZE(hex_list) - 1; index++) {
+		if (capacity >= hex_list[index].bytes)
 			break;
 	}
-	hex_divisor = hex_capacity_table[index];
-	hex_units = hex_unit_name[index];
+	hex_divisor = hex_list[index].bytes;
+	hex_units = hex_list[index].units;
 
 	/* Display the capacity */
 	sdhc_debug("%3lld.%03lld %sytes (%3lld.%03lld %sytes)%s%s\n",

-- 
To view, visit https://review.coreboot.org/19643
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie5c96e78417b667438a00ee22c70894a00d13291
Gerrit-PatchSet: 3
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Owner: Lee Leahy <leroy.p.leahy at intel.com>
Gerrit-Reviewer: Aaron Durbin <adurbin at chromium.org>
Gerrit-Reviewer: Lee Leahy <leroy.p.leahy at intel.com>
Gerrit-Reviewer: Martin Roth <martinroth at google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi at google.com>
Gerrit-Reviewer: Paul Menzel <paulepanter at users.sourceforge.net>
Gerrit-Reviewer: build bot (Jenkins) <no-reply at coreboot.org>



More information about the coreboot-gerrit mailing list