diff --git a/thirdparty/gbstring.c b/thirdparty/gbstring.c index 4be85ed..badffaa 100644 --- a/thirdparty/gbstring.c +++ b/thirdparty/gbstring.c @@ -89,7 +89,19 @@ gbs gbs_new(char const *str) { size_t len = str ? strlen(str) : 0; return gbs_newlen(str, len); } - +gbs gbs_newvprintf(const char *fmt, va_list ap) { + gbs s; + s = gbs_catvprintf(NULL, fmt, ap); + return s; +} +gbs gbs_newprintf(char const *fmt, ...) { + gbs s; + va_list ap; + va_start(ap, fmt); + s = gbs_catvprintf(NULL, fmt, ap); + va_end(ap); + return s; +} void gbs_free(gbs str) { if (str == NULL) return; @@ -227,9 +239,7 @@ gbs gbs_catvprintf(gbs s, const char *fmt, va_list ap) { } if (s == NULL) return NULL; - va_copy(cpy, ap); - vsnprintf(s + old_len, (size_t)required + 1, fmt, cpy); - va_end(cpy); + vsnprintf(s + old_len, (size_t)required + 1, fmt, ap); return s; } diff --git a/thirdparty/gbstring.h b/thirdparty/gbstring.h index 2ab8bc9..9d34b76 100644 --- a/thirdparty/gbstring.h +++ b/thirdparty/gbstring.h @@ -8,6 +8,12 @@ typedef char *gbs; gbs gbs_newcap(size_t cap); gbs gbs_newlen(void const *str, size_t len); gbs gbs_new(char const *str); +gbs gbs_newvprintf(const char *fmt, va_list ap); +gbs gbs_newprintf(char const *fmt, ...) +#ifdef __GNUC__ + __attribute__((format(printf, 1, 2))) +#endif + ; void gbs_free(gbs str); gbs gbs_dup(gbs const str); @@ -21,6 +27,12 @@ void gbs_clear(gbs str); gbs gbs_catlen(gbs str, void const *other, size_t len); gbs gbs_cat(gbs str, char const *other); gbs gbs_catgbs(gbs str, gbs const other); +gbs gbs_catvprintf(gbs str, const char *fmt, va_list ap); +gbs gbs_catprintf(gbs str, char const *fmt, ...) +#ifdef __GNUC__ + __attribute__((format(printf, 2, 3))) +#endif + ; gbs gbs_cpylen(gbs str, char const *cstr, size_t len); gbs gbs_cpy(gbs str, char const *cstr); @@ -31,11 +43,4 @@ bool gbs_equal(gbs const lhs, gbs const rhs); gbs gbs_trim(gbs str, char const *cut_set); -gbs gbs_catvprintf(gbs str, const char *fmt, va_list ap); -gbs gbs_catprintf(gbs str, char const *fmt, ...) -#ifdef __GNUC__ - __attribute__((format(printf, 2, 3))) -#endif - ; - size_t gbs_totalmemused(gbs const str);