mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 11:04:20 +00:00
Merge "feat(libc): add %X to printf/snprintf" into integration
This commit is contained in:
commit
94e27bc1ae
1 changed files with 15 additions and 7 deletions
|
@ -36,7 +36,7 @@ static int string_print(const char *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
|
static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
|
||||||
char padc, int padn)
|
char padc, int padn, bool uppercase)
|
||||||
{
|
{
|
||||||
/* Just need enough space to store 64 bit decimal integer */
|
/* Just need enough space to store 64 bit decimal integer */
|
||||||
char num_buf[20];
|
char num_buf[20];
|
||||||
|
@ -51,10 +51,13 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
|
||||||
|
|
||||||
do {
|
do {
|
||||||
rem = unum % radix;
|
rem = unum % radix;
|
||||||
if (rem < 0xa)
|
if (rem < 0xa) {
|
||||||
num_buf[i] = '0' + rem;
|
num_buf[i] = '0' + rem;
|
||||||
else
|
} else if (uppercase) {
|
||||||
|
num_buf[i] = 'A' + (rem - 0xa);
|
||||||
|
} else {
|
||||||
num_buf[i] = 'a' + (rem - 0xa);
|
num_buf[i] = 'a' + (rem - 0xa);
|
||||||
|
}
|
||||||
i++;
|
i++;
|
||||||
unum /= radix;
|
unum /= radix;
|
||||||
} while (unum > 0U);
|
} while (unum > 0U);
|
||||||
|
@ -105,8 +108,10 @@ int vprintf(const char *fmt, va_list args)
|
||||||
char padc = '\0'; /* Padding character */
|
char padc = '\0'; /* Padding character */
|
||||||
int padn; /* Number of characters to pad */
|
int padn; /* Number of characters to pad */
|
||||||
int count = 0; /* Number of printed characters */
|
int count = 0; /* Number of printed characters */
|
||||||
|
bool uppercase; /* Print characters in uppercase */
|
||||||
|
|
||||||
while (*fmt != '\0') {
|
while (*fmt != '\0') {
|
||||||
|
uppercase = false;
|
||||||
l_count = 0;
|
l_count = 0;
|
||||||
padn = 0;
|
padn = 0;
|
||||||
|
|
||||||
|
@ -129,7 +134,7 @@ loop:
|
||||||
unum = (unsigned long long int)num;
|
unum = (unsigned long long int)num;
|
||||||
|
|
||||||
count += unsigned_num_print(unum, 10,
|
count += unsigned_num_print(unum, 10,
|
||||||
padc, padn);
|
padc, padn, uppercase);
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
(void)putchar(va_arg(args, int));
|
(void)putchar(va_arg(args, int));
|
||||||
|
@ -147,12 +152,15 @@ loop:
|
||||||
}
|
}
|
||||||
|
|
||||||
count += unsigned_num_print(unum, 16,
|
count += unsigned_num_print(unum, 16,
|
||||||
padc, padn);
|
padc, padn, uppercase);
|
||||||
break;
|
break;
|
||||||
|
case 'X':
|
||||||
|
uppercase = true;
|
||||||
|
// fall through
|
||||||
case 'x':
|
case 'x':
|
||||||
unum = get_unum_va_args(args, l_count);
|
unum = get_unum_va_args(args, l_count);
|
||||||
count += unsigned_num_print(unum, 16,
|
count += unsigned_num_print(unum, 16,
|
||||||
padc, padn);
|
padc, padn, uppercase);
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
if (sizeof(size_t) == 8U)
|
if (sizeof(size_t) == 8U)
|
||||||
|
@ -167,7 +175,7 @@ loop:
|
||||||
case 'u':
|
case 'u':
|
||||||
unum = get_unum_va_args(args, l_count);
|
unum = get_unum_va_args(args, l_count);
|
||||||
count += unsigned_num_print(unum, 10,
|
count += unsigned_num_print(unum, 10,
|
||||||
padc, padn);
|
padc, padn, uppercase);
|
||||||
break;
|
break;
|
||||||
case '0':
|
case '0':
|
||||||
padc = '0';
|
padc = '0';
|
||||||
|
|
Loading…
Add table
Reference in a new issue