tiny-printf: Support vsnprintf()
authorSimon South <simon@simonsouth.net>
Wed, 2 Oct 2019 14:55:07 +0000 (10:55 -0400)
committerTom Rini <trini@konsulko.com>
Thu, 31 Oct 2019 11:22:53 +0000 (07:22 -0400)
Add a simple implementation of this function, to allow logging to be
enabled in the SPL or TPL for systems that rely on the tiny printf()
implementation.

To keep the code size small,

- The function is built only when logging is enabled, as it
  (currently) is not needed otherwise; and
- Like the existing implementation of snprintf(), its buffer-size
  parameter is ignored.

Signed-off-by: Simon South <simon@simonsouth.net>
lib/tiny-printf.c

index ebef92fc9f6b3c938bfd4abe7894483915b05768..62e638196172023af19b8391cd4c686ebd2b2353 100644 (file)
@@ -366,6 +366,22 @@ int sprintf(char *buf, const char *fmt, ...)
        return ret;
 }
 
+#if CONFIG_IS_ENABLED(LOG)
+/* Note that size is ignored */
+int vsnprintf(char *buf, size_t size, const char *fmt, va_list va)
+{
+       struct printf_info info;
+       int ret;
+
+       info.outstr = buf;
+       info.putc = putc_outstr;
+       ret = _vprintf(&info, fmt, va);
+       *info.outstr = '\0';
+
+       return ret;
+}
+#endif
+
 /* Note that size is ignored */
 int snprintf(char *buf, size_t size, const char *fmt, ...)
 {