aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLAN-TW <lantw44@gmail.com>2014-01-13 01:52:43 +0800
committerLAN-TW <lantw44@gmail.com>2014-01-13 01:52:43 +0800
commita48f8ee270b3aa01043fd7585fd918e86869d7af (patch)
tree3c604475c4b94446b825530179cfe9da5d0e83ee
parentbfef3b089a93fc5c7b736ccb463b6e2ea7115d53 (diff)
downloadl4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.tar.gz
l4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.tar.zst
l4basic-a48f8ee270b3aa01043fd7585fd918e86869d7af.zip
Add lbs_str_vprintf to accept a va_list argument
-rw-r--r--l4str.c22
-rw-r--r--l4str.h2
2 files changed, 18 insertions, 6 deletions
diff --git a/l4str.c b/l4str.c
index 0d3577e..83cecae 100644
--- a/l4str.c
+++ b/l4str.c
@@ -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;
}
-
diff --git a/l4str.h b/l4str.h
index cda3c1d..b041e22 100644
--- a/l4str.h
+++ b/l4str.h
@@ -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 */