From 852a5b237116e8b53ae18ea8ea00505e44b40dfe Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 8 Oct 2026 22:23:55 +0200 Subject: feat: file descriptor and proper stdio --- user/save.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'user/save.c') diff --git a/user/save.c b/user/save.c index b3664f4..48e1930 100644 --- a/user/save.c +++ b/user/save.c @@ -2,23 +2,30 @@ void _start(const char* arg, unsigned long arglen) { - if (arglen == 0 || arglen >= 64) + if (arglen == 0 || arglen >= 120) { put("usage: run save \n"); sys_exit(1); } - char name[64]; + char name[128]; for (unsigned long i = 0; i < arglen; i++) name[i] = arg[i]; name[arglen] = 0; + long fd = sys_open(name, O_CREAT | O_TRUNC | O_WRONLY); + if (fd < 0) + { + put("save: "); + put(name); + put(": cannot open\n"); + sys_exit(1); + } + put("saving to "); put(name); put(" -- type lines, a single . saves\n"); - char buffer[4096]; - int length = 0; for (;;) { char line[256]; @@ -26,20 +33,13 @@ void _start(const char* arg, unsigned long arglen) put("\n"); if (n == 1 && line[0] == '.') break; - for (int i = 0; i < n && length < 4000; i++) - buffer[length++] = line[i]; - if (length < 4000) - buffer[length++] = '\n'; + sys_write(fd, line, (unsigned long)n); + sys_write(fd, "\n", 1); } - if (sys_fs_write(name, buffer, (unsigned long)length)) - { - put("saved "); - put(name); - put("\n"); - } - else - put("write failed\n"); - + sys_close(fd); + put("saved "); + put(name); + put("\n"); sys_exit(0); } -- cgit v1.3