diff options
author | Anton Kling <anton@kling.gg> | 2024-12-10 12:24:07 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-12-10 12:24:07 +0100 |
commit | 916aa42260290e9e864304bc7d9395b6aa693c27 (patch) | |
tree | 784cdcbe26e828e18413bf9d31d6a84ed74dd1ba /kernel/timer.c | |
parent | bcca3d183930eeaf3d024476f39d1d8fccf2ebab (diff) |
kernel: Add string view and string builder
This makes write/read calls that use strings to communicate much
simpler and less error prone.
Diffstat (limited to 'kernel/timer.c')
-rw-r--r-- | kernel/timer.c | 22 |
1 files changed, 5 insertions, 17 deletions
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 <drivers/cmos.h> #include <fs/devfs.h> #include <interrupts.h> +#include <lib/sv.h> #include <math.h> #include <random.h> #include <time.h> @@ -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; |