| 143 | static void buf_putc(buf *b, char c) { |
| 144 | buf_append(b, &c, 1); |
| 145 | } |
| 146 | |
| 147 | static void buf_puts(buf *b, const char *s) { |
| 148 | buf_append(b, s, strlen(s)); |
| 149 | } |
| 150 | |
| 151 | static void buf_printf(buf *b, const char *fmt, ...) { |
| 152 | va_list ap; |
| 153 | va_start(ap, fmt); |
| 154 | va_list ap2; |
| 155 | va_copy(ap2, ap); |
| 156 | int n = vsnprintf(NULL, 0, fmt, ap); |
| 157 | va_end(ap); |
| 158 | if (n < 0) die("vsnprintf failed"); |
| 159 | buf_reserve(b, (size_t)n); |
| 160 | vsnprintf(b->ptr + b->len, b->cap - b->len, fmt, ap2); |
no test coverage detected