From 08b786a6770c172f433e28b0eb1e893f4fbae40a Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Thu, 27 Mar 2025 12:51:35 +0300 Subject: Added __vrsnprintf --- include/jacson.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include/jacson.h') diff --git a/include/jacson.h b/include/jacson.h index aca103b..2dc7369 100644 --- a/include/jacson.h +++ b/include/jacson.h @@ -145,6 +145,7 @@ bool jacson_try_get_to(jacson_value *obj, enum jacson_type type, void *mem); #ifdef JACSON_EXPORT_RSNPRINTF size_t __jacson_rsnprintf(char **str, size_t *strsz, size_t off, const char *fmt, ...); +size_t __jacson_vrsnprintf(char **str, size_t *strsz, size_t off, const char *fmt, va_list ls); size_t __jacson_rsnputc(char **str, size_t *strsz, size_t off, char c); #endif // JACSON_EXPORT_RSNPRINTF @@ -225,6 +226,21 @@ try_write: va_end(ls); return ln; } +size_t __jacson_vrsnprintf(char **const str, size_t *strsz, size_t off, const char *fmt, va_list ls) { + va_list ls1; + size_t ln; +try_write: + va_copy(ls1, ls); + ln = vsnprintf(*str + off, *strsz-off, fmt, ls1); + va_end(ls1); + if (ln >= *strsz-off) { + *strsz <<= 1; + *str = realloc(*str, *strsz); + goto try_write; + } + va_end(ls); + return ln; +} size_t __jacson_rsnputc(char **const str, size_t *strsz, size_t off, char c) { if (*strsz - off <= 1) { *strsz <<= 1; -- cgit v1.2.3-70-g09d2