summaryrefslogtreecommitdiffstats
path: root/jv.c
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2013-12-04 18:14:10 -0600
committerNicolas Williams <nico@cryptonector.com>2013-12-04 18:21:41 -0600
commit04bc2ef7cf0b02f434c99239d80f59bbf275a1d2 (patch)
tree01f8c431e9098753d6ff4c6079ae57c1bdc5d382 /jv.c
parent09104ce531f2ff2b941592b161bbb10f28b90c09 (diff)
Add jv_string_vfmt()
Diffstat (limited to 'jv.c')
-rw-r--r--jv.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/jv.c b/jv.c
index 999c776b..b66b0738 100644
--- a/jv.c
+++ b/jv.c
@@ -774,14 +774,14 @@ jv jv_string_append_str(jv a, const char* str) {
return jv_string_append_buf(a, str, strlen(str));
}
-jv jv_string_fmt(const char* fmt, ...) {
+jv jv_string_vfmt(const char* fmt, va_list ap) {
int size = 1024;
while (1) {
char* buf = jv_mem_alloc(size);
- va_list args;
- va_start(args, fmt);
- int n = vsnprintf(buf, size, fmt, args);
- va_end(args);
+ va_list ap2;
+ va_copy(ap2, ap);
+ int n = vsnprintf(buf, size, fmt, ap2);
+ va_end(ap2);
if (n < size) {
jv ret = jv_string_sized(buf, n);
jv_mem_free(buf);
@@ -793,6 +793,14 @@ jv jv_string_fmt(const char* fmt, ...) {
}
}
+jv jv_string_fmt(const char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+ jv res = jv_string_vfmt(fmt, args);
+ va_end(args);
+ return res;
+}
+
/*
* Objects (internal helpers)
*/