hv: sprintf: fix 'Declaration does not specify an array'

The array size of upper_hex_digits and lower_hex_digits are same and
constant.
Use an array rather than a pointer to fix the violation - 'Declaration
does not specify an array'

v3 -> v4:
 * Update the array size of 'digits'
 * Update the usage of 'digits'

v2 -> v3:
 * Update the usage of 'digits'

v1 -> v2:
 * Define a MACRO for the array size of 'digits'
 * Simplify the declaration of 'digits'

Signed-off-by: Shiqing Gao <shiqing.gao@intel.com>
Reviewed-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Shiqing Gao 2018-07-13 11:25:20 +08:00 committed by lijinxia
parent aa5027a30c
commit f0fe17de96

View File

@ -10,7 +10,9 @@
#define NULL ((void *) 0) #define NULL ((void *) 0)
#endif #endif
#define PRINT_STRING_MAX_LEN 4096 #define PRINT_STRING_MAX_LEN 4096U
#define HEX_DIGITS_LEN 17U
/** Use upper case letters for hexadecimal format. */ /** Use upper case letters for hexadecimal format. */
#define PRINT_FLAG_UPPER 0x00000001U #define PRINT_FLAG_UPPER 0x00000001U
@ -292,7 +294,7 @@ static int print_pow2(struct print_param *param,
/* buffer for the 0/0x/0X prefix */ /* buffer for the 0/0x/0X prefix */
char prefix[2]; char prefix[2];
/* pointer to the digits translation table */ /* pointer to the digits translation table */
const char *digits; const char (*digits)[HEX_DIGITS_LEN];
/* mask to extract next character */ /* mask to extract next character */
uint64_t mask; uint64_t mask;
int ret; int ret;
@ -302,7 +304,7 @@ static int print_pow2(struct print_param *param,
/* determine digit translation table */ /* determine digit translation table */
digits = ((param->vars.flags & PRINT_FLAG_UPPER) != 0) ? digits = ((param->vars.flags & PRINT_FLAG_UPPER) != 0) ?
upper_hex_digits : lower_hex_digits; &upper_hex_digits : &lower_hex_digits;
/* apply mask for short/char */ /* apply mask for short/char */
v &= param->vars.mask; v &= param->vars.mask;
@ -315,14 +317,14 @@ static int print_pow2(struct print_param *param,
if (shift == 4U) { if (shift == 4U) {
param->vars.prefixlen = 2U; param->vars.prefixlen = 2U;
prefix[1] = digits[16]; prefix[1] = (*digits)[16];
} }
} }
/* determine digits from right to left */ /* determine digits from right to left */
do { do {
pos--; pos--;
*pos = digits[(v & mask)]; *pos = (*digits)[(v & mask)];
v >>= shift; v >>= shift;
} while (v != 0UL); } while (v != 0UL);