diff options
Diffstat (limited to 'pit/src/runtime/dump.c')
| -rw-r--r-- | pit/src/runtime/dump.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/pit/src/runtime/dump.c b/pit/src/runtime/dump.c index 9627a36..4d67bb6 100644 --- a/pit/src/runtime/dump.c +++ b/pit/src/runtime/dump.c @@ -183,3 +183,24 @@ i64 pit_dump(pit_runtime *rt, char *buf, i64 len, pit_value v, bool readable) { pit_dump_with_callback(rt, v, readable, pit_dump_to_buf_callback, &cl); return cl.off; } + +i64 pit_dump_printf_callback(va_list ap, char *buf, size_t len, void *data) { + pit_runtime *rt = (pit_runtime *) data; + pit_value arg = va_arg(ap, pit_value); + return pit_dump(rt, buf, (i64) len, arg, false); +} +i64 pit_vsnprintf(pit_runtime *rt, char *buf, i64 len, char *format, va_list ap) { + if (len == 0) return 0; + pit_printf_handler h[1]; + h[0].specifier = 'v'; h[0].callback = pit_dump_printf_callback; + i64 ret = pit_vsnprintf_helper(buf, (size_t) (len - 1), format, ap, h, 1, rt); + buf[ret] = 0; + return ret; +} +i64 pit_snprintf(pit_runtime *rt, char *buf, i64 len, char *format, ...) { + va_list ap; + va_start(ap, format); + i64 ret = pit_vsnprintf(rt, buf, len, format, ap); + va_end(ap); + return ret; +} |
