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@intel.com> Reviewed-on: https://review.coreboot.org/19643 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
72f730e23c
commit
bf5d5093fc
|
@ -30,41 +30,9 @@
|
||||||
#define DECIMAL_CAPACITY_MULTIPLIER 1000ULL
|
#define DECIMAL_CAPACITY_MULTIPLIER 1000ULL
|
||||||
#define HEX_CAPACITY_MULTIPLIER 1024ULL
|
#define HEX_CAPACITY_MULTIPLIER 1024ULL
|
||||||
|
|
||||||
static const char * const hex_unit_name[] = {
|
struct capacity {
|
||||||
"TiB", "GiB", "MiB", "KiB", "B"
|
const char * const units;
|
||||||
};
|
uint64_t bytes;
|
||||||
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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void display_capacity(struct storage_media *media, int partition_number)
|
static void display_capacity(struct storage_media *media, int partition_number)
|
||||||
|
@ -77,6 +45,26 @@ static void display_capacity(struct storage_media *media, int partition_number)
|
||||||
int index;
|
int index;
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *separator;
|
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 */
|
/* Get the partition name */
|
||||||
capacity = media->capacity[partition_number];
|
capacity = media->capacity[partition_number];
|
||||||
|
@ -86,23 +74,20 @@ static void display_capacity(struct storage_media *media, int partition_number)
|
||||||
separator = ": ";
|
separator = ": ";
|
||||||
|
|
||||||
/* Determine the decimal divisor for the capacity */
|
/* Determine the decimal divisor for the capacity */
|
||||||
ASSERT(ARRAY_SIZE(decimal_capacity_table)
|
for (index = 0; index < ARRAY_SIZE(decimal_list) - 1; index++) {
|
||||||
== ARRAY_SIZE(decimal_unit_name));
|
if (capacity >= decimal_list[index].bytes)
|
||||||
for (index = 0; index < ARRAY_SIZE(decimal_capacity_table); index++) {
|
|
||||||
if (capacity >= decimal_capacity_table[index])
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
decimal_divisor = decimal_capacity_table[index];
|
decimal_divisor = decimal_list[index].bytes;
|
||||||
decimal_units = decimal_unit_name[index];
|
decimal_units = decimal_list[index].units;
|
||||||
|
|
||||||
/* Determine the hex divisor for the capacity */
|
/* 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_list) - 1; index++) {
|
||||||
for (index = 0; index < ARRAY_SIZE(hex_capacity_table); index++) {
|
if (capacity >= hex_list[index].bytes)
|
||||||
if (capacity >= hex_capacity_table[index])
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
hex_divisor = hex_capacity_table[index];
|
hex_divisor = hex_list[index].bytes;
|
||||||
hex_units = hex_unit_name[index];
|
hex_units = hex_list[index].units;
|
||||||
|
|
||||||
/* Display the capacity */
|
/* Display the capacity */
|
||||||
sdhc_debug("%3lld.%03lld %sytes (%3lld.%03lld %sytes)%s%s\n",
|
sdhc_debug("%3lld.%03lld %sytes (%3lld.%03lld %sytes)%s%s\n",
|
||||||
|
|
Loading…
Reference in New Issue