From bc3c37840c2fe435ca8b0d1e5a59dde7ae663c0c Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Fri, 28 May 2021 14:40:00 +0300 Subject: [PATCH] shared: add str_printf() asprintf() has the problem that it leaves *strp undefined when it fails. Here is a simple wrapper that ensures NULL if asprintf() fails, which is much more convenient to use. This will be useful in future patches, where one needs to return error messages from maybe failing functions, and more. Signed-off-by: Pekka Paalanen --- shared/string-helpers.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/shared/string-helpers.h b/shared/string-helpers.h index c8ce4498..e7174b21 100644 --- a/shared/string-helpers.h +++ b/shared/string-helpers.h @@ -31,6 +31,8 @@ #include #include #include +#include +#include /* Convert string to integer * @@ -68,4 +70,29 @@ safe_strtoint(const char *str, int32_t *value) return true; } +/** + * Exactly like asprintf(), but sets *str_out to NULL if it fails. + * + * If str_out is NULL, does nothing. + */ +static inline void __attribute__ ((format (printf, 2, 3))) +str_printf(char **str_out, const char *fmt, ...) +{ + char *msg; + va_list ap; + int ret; + + if (!str_out) + return; + + va_start(ap, fmt); + ret = vasprintf(&msg, fmt, ap); + va_end(ap); + + if (ret >= 0) + *str_out = msg; + else + *str_out = NULL; +} + #endif /* WESTON_STRING_HELPERS_H */