From a219da14ce8bbd15fec4ea962fd0ec175da0f0aa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 31 Jan 2025 09:43:30 +0000 Subject: [PATCH] Fix `gb.h`'s `gb_fprintf_va` to allocate if the string is larger than the default buffer --- src/gb/gb.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gb/gb.h b/src/gb/gb.h index f74026c7d91..59611ceb6ad 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -5837,9 +5837,20 @@ gb_inline isize gb_printf_err_va(char const *fmt, va_list va) { } gb_inline isize gb_fprintf_va(struct gbFile *f, char const *fmt, va_list va) { - gb_local_persist char buf[4096]; + char buf[4096]; isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va); + char *new_buf = NULL; + isize n = gb_size_of(buf); + while (len < 0) { + n <<= 1; + gb_free(gb_heap_allocator(), new_buf); + new_buf = gb_alloc_array(gb_heap_allocator(), char, n);; + len = gb_snprintf_va(new_buf, n, fmt, va); + } gb_file_write(f, buf, len-1); // NOTE(bill): prevent extra whitespace + if (new_buf != NULL) { + gb_free(gb_heap_allocator(), new_buf); + } return len; }