summaryrefslogtreecommitdiff
path: root/kernel/fs/fs.c
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-05-06 15:14:11 -0400
committerIan McFarlane <i.mcfarlane2002@gmail.com>2025-05-06 15:14:11 -0400
commitda396afa8b612b8f8ff07d71c57761a627b158eb (patch)
treeb4935b29aca686c6ee17a583cffe149d7bb3c819 /kernel/fs/fs.c
parentupdate forkman with spinlock (diff)
parentstart docs (diff)
downloadcomus-da396afa8b612b8f8ff07d71c57761a627b158eb.tar.gz
comus-da396afa8b612b8f8ff07d71c57761a627b158eb.tar.bz2
comus-da396afa8b612b8f8ff07d71c57761a627b158eb.zip
merge main into forkmanforkman
Diffstat (limited to 'kernel/fs/fs.c')
-rw-r--r--kernel/fs/fs.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c
index a887ca4..ef031f2 100644
--- a/kernel/fs/fs.c
+++ b/kernel/fs/fs.c
@@ -1,5 +1,6 @@
#include <lib.h>
#include <comus/fs.h>
+#include <comus/fs/tar.h>
#include <comus/mboot.h>
#include <comus/error.h>
@@ -50,9 +51,9 @@ static void load_fs(struct disk *disk)
fs->fs_id = disk->d_id;
fs->fs_present = 1;
- // // try examplefs
- // if (example_mount(fs) == SUCCESS)
- // return;
+ // try tarfs
+ if (tar_mount(fs) == SUCCESS)
+ return;
fs->fs_present = 0;
WARN("failed to load fs on disk %u", disk->d_id);
@@ -122,13 +123,16 @@ int fs_find_file_rel(struct file *rel, char *rel_path, struct file *res)
static int disk_read_rd(struct disk *disk, size_t offset, size_t len,
uint8_t *buffer)
{
- if (offset + len >= disk->rd.len) {
+ if (offset >= disk->rd.len) {
WARN("attempted to read past length of ramdisk");
return -E_BAD_PARAM;
}
+ if (disk->rd.len - offset < len)
+ len = disk->rd.len - offset;
+
memcpy(buffer, disk->rd.start + offset, len);
- return 0;
+ return len;
}
static int disk_read_ata(struct disk *disk, size_t offset, size_t len,
@@ -181,13 +185,16 @@ int disk_read(struct disk *disk, size_t offset, size_t len, void *buffer)
static int disk_write_rd(struct disk *disk, size_t offset, size_t len,
uint8_t *buffer)
{
- if (offset + len >= disk->rd.len) {
+ if (offset >= disk->rd.len) {
WARN("attempted to write past length of ramdisk");
return -E_BAD_PARAM;
}
+ if (disk->rd.len - offset < len)
+ len = disk->rd.len - offset;
+
memcpy(disk->rd.start + offset, buffer, len);
- return 0;
+ return len;
}
static int disk_write_ata(struct disk *disk, size_t offset, size_t len,