diff options
author | LAN-TW <lantw44@gmail.com> | 2014-01-13 01:52:43 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2014-01-13 01:52:43 +0800 |
commit | a48f8ee270b3aa01043fd7585fd918e86869d7af (patch) | |
tree | 3c604475c4b94446b825530179cfe9da5d0e83ee | |
parent | bfef3b089a93fc5c7b736ccb463b6e2ea7115d53 (diff) | |
download | l4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.tar.gz l4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.tar.zst l4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.zip |
Add lbs_str_vprintf to accept a va_list argument
-rw-r--r-- | l4str.c | 22 | ||||
-rw-r--r-- | l4str.h | 2 |
2 files changed, 18 insertions, 6 deletions
@@ -25,18 +25,28 @@ bool lbs_str_has_suffix (const char* str, const char* suffix) { char* lbs_str_printf (const char* format, ...) { va_list ap; char* newstr; - int len; va_start (ap, format); - len = vsnprintf (NULL, 0, format, ap) + 1; + newstr = lbs_str_vprintf (format, ap); va_end (ap); + return newstr; +} + +char* lbs_str_vprintf (const char* format, va_list ap) { + va_list ap1, ap2; + char* newstr; + int len; + + va_copy (ap1, ap); + len = vsnprintf (NULL, 0, format, ap1) + 1; + va_end (ap1); + newstr = malloc (len); - va_start (ap, format); - vsnprintf (newstr, len, format, ap); - va_end (ap); + va_copy (ap2, ap); + vsnprintf (newstr, len, format, ap2); + va_end (ap2); return newstr; } - @@ -3,11 +3,13 @@ #define LBS_STR_H #include <l4common.h> +#include <stdarg.h> #define LBS_STR_STATIC_STRLEN(x) (sizeof(x)/sizeof(char) - 1) #define LBS_STR_ARRAY_LEN(x,t) (sizeof(x)/sizeof(t)) bool lbs_str_has_suffix (const char* str, const char* suffix); char* lbs_str_printf (const char* format, ...); +char* lbs_str_vprintf (const char* format, va_list ap); #endif /* LBS_STR_H */ |