summaryrefslogtreecommitdiff
path: root/std/io.zc
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 01:54:51 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 01:54:51 +0000
commit98623f2fdd63232edf0ebab1b9680cf4e33e6f10 (patch)
tree46e05b4953ea873bc5e52339a333f7911fc22867 /std/io.zc
parent8cb7089b2eb09d40d9497cea40d088d94676a8c6 (diff)
More docs, and a few improvements for the standard library
Diffstat (limited to 'std/io.zc')
-rw-r--r--std/io.zc22
1 files changed, 22 insertions, 0 deletions
diff --git a/std/io.zc b/std/io.zc
index 02018a8..10ac712 100644
--- a/std/io.zc
+++ b/std/io.zc
@@ -1,5 +1,6 @@
import "./core.zc"
+import "./string.zc"
raw {
char* format(const char* fmt, ...) {
@@ -34,8 +35,29 @@ raw {
{
return fgetc((FILE*)stream);
}
+
+ char* _z_format_alloc(const char* fmt, va_list args) {
+ int len = vsnprintf(NULL, 0, fmt, args);
+ if (len < 0) return NULL;
+ char* buffer = malloc(len + 1);
+ if (!buffer) return NULL;
+ vsnprintf(buffer, len + 1, fmt, args);
+ return buffer;
+ }
+
+ char* format_s_raw(char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+ char* ret = _z_format_alloc(fmt, args);
+ va_end(args);
+ return ret;
+ }
}
+extern fn format_s_raw(fmt: char*, ...) -> char*;
+
+// TODO: add format function. We will need to do a few updates...
+// like adding support for varargs in Zen C functions.
fn readln() -> char* {