summaryrefslogtreecommitdiff
path: root/stage3/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'stage3/fs.c')
-rw-r--r--stage3/fs.c13
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;