Browse Source

Fix `gb.h`'s `gb_fprintf_va` to allocate if the string is larger than the default buffer

gingerBill 7 months ago
parent
commit
a219da14ce
1 changed files with 12 additions and 1 deletions
  1. 12 1
      src/gb/gb.h

+ 12 - 1
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;
 }