|
@@ -253,14 +253,18 @@ void buffer_appendb(buffer_t *dst, buffer_t *src) {
|
|
|
|
|
|
void buffer_fmt(buffer_t *buf, const char *fmt, ...) {
|
|
void buffer_fmt(buffer_t *buf, const char *fmt, ...) {
|
|
va_list args;
|
|
va_list args;
|
|
- va_start(args, fmt);
|
|
|
|
|
|
+ va_list largs;
|
|
|
|
+
|
|
|
|
+ va_start(largs, fmt);
|
|
|
|
+ va_copy(args, largs);
|
|
|
|
|
|
- size_t size = vsnprintf(NULL, 0, fmt, args);
|
|
|
|
- char *str = malloc(sizeof(char) * (size + 1));
|
|
|
|
|
|
+ size_t size = vsnprintf(NULL, 0, fmt, largs) + 1;
|
|
|
|
+ char *str = malloc(sizeof(char) * size);
|
|
|
|
|
|
- vsnprintf(str, size + 1, fmt, args);
|
|
|
|
|
|
+ vsnprintf(str, size, fmt, args);
|
|
|
|
|
|
va_end(args);
|
|
va_end(args);
|
|
|
|
+ va_end(largs);
|
|
|
|
|
|
buffer_appends(buf, str);
|
|
buffer_appends(buf, str);
|
|
}
|
|
}
|