mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-21 20:14:29 +00:00
Merge changes from topic "snprintf-fix" into integration
* changes: fix(libc): snprintf: include stdint.h fix(libc): limit snprintf radix value fix(libc): fix snprintf corner cases
This commit is contained in:
commit
b22f18e365
1 changed files with 14 additions and 24 deletions
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
#include <plat/common/platform.h>
|
#include <plat/common/platform.h>
|
||||||
|
@ -40,6 +41,12 @@ static void unsigned_num_print(char **s, size_t n, size_t *chars_printed,
|
||||||
unsigned int rem;
|
unsigned int rem;
|
||||||
char ascii_a = capitalise ? 'A' : 'a';
|
char ascii_a = capitalise ? 'A' : 'a';
|
||||||
|
|
||||||
|
if (radix < 10) {
|
||||||
|
ERROR("snprintf: unsupported radix '%d'.", radix);
|
||||||
|
plat_panic_handler();
|
||||||
|
assert(0); /* Unreachable */
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
rem = unum % radix;
|
rem = unum % radix;
|
||||||
if (rem < 10U) {
|
if (rem < 10U) {
|
||||||
|
@ -52,31 +59,14 @@ static void unsigned_num_print(char **s, size_t n, size_t *chars_printed,
|
||||||
} while (unum > 0U);
|
} while (unum > 0U);
|
||||||
|
|
||||||
width = i;
|
width = i;
|
||||||
if (padn > width) {
|
for (i = padn - width; i > 0; i--) {
|
||||||
(*chars_printed) += (size_t)padn;
|
CHECK_AND_PUT_CHAR(*s, n, *chars_printed, padc);
|
||||||
} else {
|
|
||||||
(*chars_printed) += (size_t)width;
|
|
||||||
}
|
}
|
||||||
|
for (i = width; i > 0; i--) {
|
||||||
if (*chars_printed < n) {
|
CHECK_AND_PUT_CHAR(*s, n, *chars_printed, num_buf[i - 1]);
|
||||||
|
}
|
||||||
if (padn > 0) {
|
for (i = width + padn; i < 0; i++) {
|
||||||
while (width < padn) {
|
CHECK_AND_PUT_CHAR(*s, n, *chars_printed, padc);
|
||||||
*(*s)++ = padc;
|
|
||||||
padn--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (--i >= 0) {
|
|
||||||
*(*s)++ = num_buf[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (padn < 0) {
|
|
||||||
while (width < -padn) {
|
|
||||||
*(*s)++ = padc;
|
|
||||||
padn++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue