tf_snprintf: Add support for '%s'
authorAntonio Nino Diaz <[email protected]>
Thu, 9 Aug 2018 14:30:47 +0000 (15:30 +0100)
committerAntonio Nino Diaz <[email protected]>
Fri, 10 Aug 2018 08:36:18 +0000 (09:36 +0100)
Change-Id: Ia3a159444e638f63de7dc5a6a4b76169c757188a
Signed-off-by: Antonio Nino Diaz <[email protected]>
common/tf_snprintf.c

index a99ab7ab5d9dd12f02833db058c2a7e9b98dfcb0..6df137725a4e4a783b7779b14408b2696c85a4bf 100644 (file)
@@ -8,6 +8,17 @@
 #include <platform.h>
 #include <stdarg.h>
 
+static void string_print(char **s, size_t n, size_t *chars_printed,
+                        const char *str)
+{
+       while (*str) {
+               if (*chars_printed < n)
+                       *(*s)++ = *str;
+               (*chars_printed)++;
+               str++;
+       }
+}
+
 static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
                               unsigned int unum)
 {
@@ -32,6 +43,7 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
  * The following type specifiers are supported:
  *
  * %d or %i - signed decimal format
+ * %s - string format
  * %u - unsigned decimal format
  *
  * The function panics on all other formats specifiers.
@@ -45,6 +57,7 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...)
        va_list args;
        int num;
        unsigned int unum;
+       char *str;
        size_t chars_printed = 0;
 
        if (n == 1) {
@@ -79,6 +92,10 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...)
 
                                unsigned_dec_print(&s, n, &chars_printed, unum);
                                break;
+                       case 's':
+                               str = va_arg(args, char *);
+                               string_print(&s, n, &chars_printed, str);
+                               break;
                        case 'u':
                                unum = va_arg(args, unsigned int);
                                unsigned_dec_print(&s, n, &chars_printed, unum);