From 8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 1 May 2025 20:19:38 -0400 Subject: ramdisk --- kernel/fs/fs.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'kernel/fs') diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c index 01dea20..ef031f2 100644 --- a/kernel/fs/fs.c +++ b/kernel/fs/fs.c @@ -123,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, @@ -182,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, -- cgit v1.2.3-freya