summaryrefslogtreecommitdiff
path: root/pit/src/runtime/dump.c
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-09-04 16:29:31 -0400
committerLLLL Colonq <llll@colonq>2026-09-04 16:29:31 -0400
commit843ea34efc2c5ea10edc4d534304f8287f97fbbc (patch)
tree65c2b676b650413a6154ffa7b319d4d0b6f9cff4 /pit/src/runtime/dump.c
parentc01f847b68a7fcd48eb0f3d456aa993a6f69ea8d (diff)
pit: printf
Diffstat (limited to 'pit/src/runtime/dump.c')
-rw-r--r--pit/src/runtime/dump.c21
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;
+}