]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
feat(libc): add %c to printf/snprintf
authorMaksims Svecovs <maksims.svecovs@arm.com>
Tue, 9 May 2023 11:03:31 +0000 (12:03 +0100)
committerMaksims Svecovs <maksims.svecovs@arm.com>
Thu, 11 May 2023 09:32:28 +0000 (10:32 +0100)
Adds %c support for printf and snprintf to print one character. Required
by most recent MbedTLS 3.4.0.

Change-Id: I4d9b2725127a929d58946353324f99ff22b3b28b
Signed-off-by: Maksims Svecovs <maksims.svecovs@arm.com>
lib/libc/printf.c
lib/libc/snprintf.c

index e52cbed735559459d0a1143d131e406c67bae47d..faccfdff4966559933e84319c409f6f530a119b1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2021, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -81,6 +81,7 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
  * %x - hexadecimal format
  * %s - string format
  * %d or %i - signed decimal format
+ * %c - character format
  * %u - unsigned decimal format
  * %p - pointer format
  *
@@ -130,6 +131,10 @@ loop:
                                count += unsigned_num_print(unum, 10,
                                                            padc, padn);
                                break;
+                       case 'c':
+                               (void)putchar(va_arg(args, int));
+                               count++;
+                               break;
                        case 's':
                                str = va_arg(args, char *);
                                count += string_print(str);
index 0e3256cde85b2e0067e00f2affc9b7f3c32ddef7..21d34168fab05c5c0540e1baea443ed1178c0e5e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -85,6 +85,7 @@ static void unsigned_num_print(char **s, size_t n, size_t *chars_printed,
  *
  * %x (or %X) - hexadecimal format
  * %d or %i - signed decimal format
+ * %c - character format
  * %s - string format
  * %u - unsigned decimal format
  * %p - pointer format
@@ -181,6 +182,9 @@ loop:
                                unsigned_num_print(&s, n, &chars_printed,
                                                   unum, 10, padc, padn, false);
                                break;
+                       case 'c':
+                               CHECK_AND_PUT_CHAR(s, n, chars_printed, va_arg(args, int));
+                               break;
                        case 's':
                                str = va_arg(args, char *);
                                string_print(&s, n, &chars_printed, str);