diff options
author | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-19 01:54:39 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-19 02:11:32 +0100 |
commit | 6d263c7d4e0f4b1d34694b5d3d159ccb20b3db02 (patch) | |
tree | 41578268cf68b2d9ea1737687a0f98af979948d8 /stage3/fs.c | |
parent | 5881b4d5c1040c762599f90e091e4cc4c3abe6b1 (diff) | |
download | cuddles-6d263c7d4e0f4b1d34694b5d3d159ccb20b3db02.tar.xz |
keyboard driver and threads
* PS/2 keyboard driver
* interactive shell
* move away from \0 terminated strings to sized slices
* coroutine threads and IRQ queues
Diffstat (limited to 'stage3/fs.c')
-rw-r--r-- | stage3/fs.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/stage3/fs.c b/stage3/fs.c index 9f7ea51..d4a325f 100644 --- a/stage3/fs.c +++ b/stage3/fs.c @@ -4,7 +4,7 @@ #include "memory.h" #include "heap.h" -file fs_read(const char *filename) +str fs_read(str filename) { u64 start = (*(u32 *) (0x1000-10-8))/512; @@ -13,16 +13,17 @@ file fs_read(const char *filename) if (memcmp(info+257, "ustar", 5) != 0) { free(info); - return (file) { .len = 0, .data = nil }; + return NILS; } - u8 *infop = info+124; - usize fsize = parse_num(&infop, 8, 11); + usize fsize; + str_parse_num((str) { 11, (char *) info+124 }, 8, &fsize); + usize fsect = (fsize+511)/512; - if (memcmp(info, filename, strlen(filename) + 1) == 0) { + if (memcmp(info, filename.data, filename.len) == 0 && info[filename.len] == '\0') { free(info); - return (file) { .len = fsize, .data = ata_read_full(start+1, fsect) }; + return (str) { .len = fsize, .data = ata_read_full(start+1, fsect) }; } else { free(info); start += 1 + fsect; |