From 916aa42260290e9e864304bc7d9395b6aa693c27 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Tue, 10 Dec 2024 12:24:07 +0100 Subject: kernel: Add string view and string builder This makes write/read calls that use strings to communicate much simpler and less error prone. --- kernel/timer.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) (limited to 'kernel/timer.c') diff --git a/kernel/timer.c b/kernel/timer.c index dd92d3d..b84c16a 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -49,31 +50,18 @@ int clock_read(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { if (0 != offset) { return 0; } - // Currently don't have snprintf without NULL termination... - char tmp[4096]; u64 r = timer_get_ms(); - - u64 l = ksnprintf(tmp, 4096, "%llu", r); - l = min(len, l); - memcpy(buffer, tmp, l); - return l; + return min(len, (u64)kbnprintf(buffer, len, "%llu", r)); } int clock_write(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { if (0 != offset) { return 0; } - // TODO: Move sv to kernel or something to just avoid this. I hate null - // termination - char tmp[4096]; - memcpy(tmp, buffer, len); - tmp[len] = '\0'; - int err; - u64 new_value_ms = parse_u64(tmp, NULL, 10, &err); - if (err) { - return 0; - } + struct sv string_view = sv_init(buffer, len); + + u64 new_value_ms = sv_parse_unsigned_number(string_view, &string_view); i64 new_value_seconds = new_value_ms / 1000; -- cgit v1.2.3