| 108 | } |
| 109 | |
| 110 | char *cbm_arena_sprintf(CBMArena *a, const char *fmt, ...) { |
| 111 | va_list args; |
| 112 | va_start(args, fmt); |
| 113 | int needed = vsnprintf(NULL, 0, fmt, args); |
| 114 | va_end(args); |
| 115 | if (needed < 0) { |
| 116 | return NULL; |
| 117 | } |
| 118 | |
| 119 | char *dst = (char *)cbm_arena_alloc(a, (size_t)needed + SKIP_ONE); |
| 120 | if (!dst) { |
| 121 | return NULL; |
| 122 | } |
| 123 | |
| 124 | va_start(args, fmt); |
| 125 | vsnprintf(dst, (size_t)needed + SKIP_ONE, fmt, args); |
| 126 | va_end(args); |
| 127 | return dst; |
| 128 | } |
| 129 | |
| 130 | void cbm_arena_reset(CBMArena *a) { |
| 131 | /* Keep first block, free the rest */ |
no test coverage detected