util: add vsprintf version of spdk_sprintf_alloc
-Wformat-nonliteral needs to be disabled since clang triggers it on the call to vsnprintf() now that it is nested two calls deep. Change-Id: I228b9d099cfc2b65181941cbb4798b7f8eae3baa Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
407b550ff4
commit
b4bd76bc63
@ -42,6 +42,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,6 +54,15 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
char *spdk_sprintf_alloc(const char *format, ...) __attribute__((format(printf, 1, 2)));
|
char *spdk_sprintf_alloc(const char *format, ...) __attribute__((format(printf, 1, 2)));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vsprintf with automatic buffer allocation.
|
||||||
|
*
|
||||||
|
* The return value is the formatted string,
|
||||||
|
* which should be passed to free() when no longer needed,
|
||||||
|
* or NULL on failure.
|
||||||
|
*/
|
||||||
|
char *spdk_vsprintf_alloc(const char *format, va_list args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert string to lowercase in place.
|
* Convert string to lowercase in place.
|
||||||
*
|
*
|
||||||
|
@ -42,9 +42,9 @@
|
|||||||
#include "spdk/string.h"
|
#include "spdk/string.h"
|
||||||
|
|
||||||
char *
|
char *
|
||||||
spdk_sprintf_alloc(const char *format, ...)
|
spdk_vsprintf_alloc(const char *format, va_list args)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args_copy;
|
||||||
char *buf;
|
char *buf;
|
||||||
size_t bufsize;
|
size_t bufsize;
|
||||||
int rc;
|
int rc;
|
||||||
@ -59,9 +59,9 @@ spdk_sprintf_alloc(const char *format, ...)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
va_start(args, format);
|
va_copy(args_copy, args);
|
||||||
rc = vsnprintf(buf, bufsize, format, args);
|
rc = vsnprintf(buf, bufsize, format, args_copy);
|
||||||
va_end(args);
|
va_end(args_copy);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If vsnprintf() returned a count within our current buffer size, we are done.
|
* If vsnprintf() returned a count within our current buffer size, we are done.
|
||||||
@ -85,6 +85,19 @@ spdk_sprintf_alloc(const char *format, ...)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
spdk_sprintf_alloc(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
ret = spdk_vsprintf_alloc(format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
spdk_strlwr(char *s)
|
spdk_strlwr(char *s)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ ifeq ($(CONFIG_WERROR), y)
|
|||||||
COMMON_CFLAGS += -Werror
|
COMMON_CFLAGS += -Werror
|
||||||
endif
|
endif
|
||||||
|
|
||||||
COMMON_CFLAGS += -Wformat -Wformat-security -Wformat-nonliteral
|
COMMON_CFLAGS += -Wformat -Wformat-security
|
||||||
|
|
||||||
COMMON_CFLAGS += -D_GNU_SOURCE
|
COMMON_CFLAGS += -D_GNU_SOURCE
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user