summaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-05-01 20:19:38 -0400
committerFreya Murphy <freya@freyacat.org>2025-05-01 20:19:38 -0400
commit8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb (patch)
tree10b94172c4f13f851417d2b554a2ebcab610fdc9 /kernel/fs
parentadd some warnings so i know what the fuck is going wrong, bah (diff)
downloadcomus-8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb.tar.gz
comus-8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb.tar.bz2
comus-8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb.zip
ramdisk
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/fs.c14
1 files changed, 10 insertions, 4 deletions
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,