diff options
author | Jerome Forissier <jerome@forissier.org> | 2020-07-21 10:54:51 +0200 |
---|---|---|
committer | Jérôme Forissier <jerome@forissier.org> | 2020-08-06 11:10:44 +0200 |
commit | f35d131b0a82cca736f9670528a1e948f783852d (patch) | |
tree | c610e1671f75c9bf40eab20d50c6bdf7ffc4d92e | |
parent | 9784c6557744c727126f29a5c63e7dc2d4432300 (diff) |
libutils: add sprintf()
Preparing for C++ support in TAs.
Implement sprintf() in libutils.
Signed-off-by: Jerome Forissier <jerome@forissier.org>
Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
-rw-r--r-- | lib/libutils/ext/include/printk.h | 2 | ||||
-rw-r--r-- | lib/libutils/ext/snprintk.c | 5 | ||||
-rw-r--r-- | lib/libutils/isoc/include/stdio.h | 4 | ||||
-rw-r--r-- | lib/libutils/isoc/sprintf.c | 19 | ||||
-rw-r--r-- | lib/libutils/isoc/sub.mk | 1 |
5 files changed, 31 insertions, 0 deletions
diff --git a/lib/libutils/ext/include/printk.h b/lib/libutils/ext/include/printk.h index 0a5e1034..4f21b25c 100644 --- a/lib/libutils/ext/include/printk.h +++ b/lib/libutils/ext/include/printk.h @@ -22,5 +22,7 @@ int vsnprintk(char *str, size_t size, const char *fmt, va_list ap) int __vsnprintf(char *str, size_t size, const char *fmt, va_list ap, bool ext) __attribute__((__format__(__printf__, 3, 0))); +int __vsprintf(char *bf, const char *fmt, va_list ap) + __attribute__((__format__(__printf__, 2, 0))); #endif /* PRINTK_H */ diff --git a/lib/libutils/ext/snprintk.c b/lib/libutils/ext/snprintk.c index b6bb2807..8d1744ee 100644 --- a/lib/libutils/ext/snprintk.c +++ b/lib/libutils/ext/snprintk.c @@ -150,6 +150,11 @@ __vsnprintf(char *bf, size_t size, const char *fmt, va_list ap, return retval; } +int __vsprintf(char *bf, const char *fmt, va_list ap) +{ + return kprintf(fmt, TOBUFONLY, NULL, bf, ap, false); +} + /* * kprintf: scaled down version of printf(3). * diff --git a/lib/libutils/isoc/include/stdio.h b/lib/libutils/isoc/include/stdio.h index ae41dc4f..ec545207 100644 --- a/lib/libutils/isoc/include/stdio.h +++ b/lib/libutils/isoc/include/stdio.h @@ -12,6 +12,10 @@ typedef struct _FILE FILE; int printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); +/* sprintf() is unsafe and should not be used. Prefer snprintf(). */ +int sprintf(char *str, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))) + __attribute__ ((deprecated)); int snprintf(char *str, size_t size, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); int vsnprintf (char *str, size_t size, const char *fmt, va_list ap) diff --git a/lib/libutils/isoc/sprintf.c b/lib/libutils/isoc/sprintf.c new file mode 100644 index 00000000..663956ec --- /dev/null +++ b/lib/libutils/isoc/sprintf.c @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <printk.h> +#include <stdio.h> + +int sprintf(char *str, const char *fmt, ...) +{ + int retval; + va_list ap; + + va_start(ap, fmt); + retval = __vsprintf(str, fmt, ap); + va_end(ap); + + return retval; +} diff --git a/lib/libutils/isoc/sub.mk b/lib/libutils/isoc/sub.mk index 4a092683..3811b916 100644 --- a/lib/libutils/isoc/sub.mk +++ b/lib/libutils/isoc/sub.mk @@ -11,6 +11,7 @@ srcs-y += isxdigit.c srcs-y += qsort.c cflags-qsort.c-y += -Wno-inline cflags-remove-qsort.c-y += -Wcast-align +srcs-y += sprintf.c srcs-y += snprintf.c srcs-y += stack_check.c srcs-y += strdup.c |