mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-29 09:24:33 +00:00
Fix gb.h's gb_fprintf_va to allocate if the string is larger than the default buffer
This commit is contained in:
13
src/gb/gb.h
13
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user