Merge changes I2add6b4b,I9b296372,I7af2f1d1 into integration

* changes:
  libc/snprintf: use macro to reduce duplicated code
  libc/snprintf: add support to print "%" character
  libc/printf: add support to print "%" character
This commit is contained in:
Madhukar Pappireddy 2021-01-21 21:34:09 +00:00 committed by TrustedFirmware Code Review
commit 0b2b83ea93
2 changed files with 21 additions and 19 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-2021, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -108,6 +108,9 @@ int vprintf(const char *fmt, va_list args)
/* Check the format specifier */
loop:
switch (*fmt) {
case '%':
(void)putchar('%');
break;
case 'i': /* Fall through to next one */
case 'd':
num = get_num_va_args(args, l_count);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -10,16 +10,20 @@
#include <common/debug.h>
#include <plat/common/platform.h>
#define CHECK_AND_PUT_CHAR(buf, size, chars_printed, ch) \
do { \
if ((chars_printed) < (size)) { \
*(buf) = (ch); \
(buf)++; \
} \
(chars_printed)++; \
} while (false)
static void string_print(char **s, size_t n, size_t *chars_printed,
const char *str)
{
while (*str != '\0') {
if (*chars_printed < n) {
*(*s) = *str;
(*s)++;
}
(*chars_printed)++;
CHECK_AND_PUT_CHAR(*s, n, *chars_printed, *str);
str++;
}
}
@ -130,6 +134,9 @@ int vsnprintf(char *s, size_t n, const char *fmt, va_list args)
/* Check the format specifier. */
loop:
switch (*fmt) {
case '%':
CHECK_AND_PUT_CHAR(s, n, chars_printed, '%');
break;
case '0':
case '1':
case '2':
@ -158,12 +165,8 @@ loop:
num = va_arg(args, int);
if (num < 0) {
if (chars_printed < n) {
*s = '-';
s++;
}
chars_printed++;
CHECK_AND_PUT_CHAR(s, n, chars_printed,
'-');
unum = (unsigned int)-num;
} else {
unum = (unsigned int)num;
@ -210,13 +213,9 @@ loop:
continue;
}
if (chars_printed < n) {
*s = *fmt;
s++;
}
CHECK_AND_PUT_CHAR(s, n, chars_printed, *fmt);
fmt++;
chars_printed++;
}
if (n > 0U) {