summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-25 15:02:54 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-25 15:03:09 -0400
commit7e707c61ab0aaf36875bd6645c0898f15fbef0f9 (patch)
treebd699da6342d09214be994cf85f735c62abe82d3 /kernel
parentadded assert that bump allocator is only being asked for one page at a time (diff)
downloadcomus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.tar.gz
comus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.tar.bz2
comus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.zip
fix fs off by 1 sector
Diffstat (limited to 'kernel')
-rw-r--r--kernel/fs/fs.c6
-rw-r--r--kernel/include/comus/fs.h4
2 files changed, 5 insertions, 5 deletions
diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c
index c8399a3..98b04df 100644
--- a/kernel/fs/fs.c
+++ b/kernel/fs/fs.c
@@ -110,8 +110,8 @@ static int disk_read_ata(struct disk *disk, size_t offset, size_t len,
static size_t atabuf_len = 0;
static uint16_t *atabuf = NULL;
- uint32_t numsects = (len + ATA_SECT_SIZE - 1) / ATA_SECT_SIZE;
uint32_t err = offset % ATA_SECT_SIZE;
+ uint32_t numsects = (len + err + ATA_SECT_SIZE - 1) / ATA_SECT_SIZE;
int ret = 0;
if (atabuf == NULL || atabuf_len < numsects * ATA_SECT_SIZE) {
@@ -123,12 +123,12 @@ static int disk_read_ata(struct disk *disk, size_t offset, size_t len,
// read sectors
if ((ret = ide_device_read_sectors(disk->ide, numsects,
offset / ATA_SECT_SIZE, atabuf)))
- return 1;
+ return ret;
// copy over to buffer
memcpy(buffer, (char *)atabuf + err, len);
- return ret;
+ return 0;
}
int disk_read(struct disk *disk, size_t offset, size_t len, void *buffer)
diff --git a/kernel/include/comus/fs.h b/kernel/include/comus/fs.h
index e67b6fe..dab84a5 100644
--- a/kernel/include/comus/fs.h
+++ b/kernel/include/comus/fs.h
@@ -45,7 +45,7 @@ struct disk {
* @param offset - the offset into the disk to read
* @param len - the length of the data to read into `buffer`
* @param buffer - the buffer to save data into
- * @returns bytes read on success, negative fs error code in failure
+ * @returns 0 on success, error code in failure
*/
int disk_read(struct disk *disk, size_t offset, size_t len, void *buffer);
@@ -56,7 +56,7 @@ int disk_read(struct disk *disk, size_t offset, size_t len, void *buffer);
* @param offset - the offset into the disk to write
* @param len - the length of the data to write into `buffer`
* @param buffer - the buffer to read from
- * @returns bytes written on success, negative fs error code in failure
+ * @returns 0 on success, error code in failure
*/
int disk_write(struct disk *disk, size_t offset, size_t len, void *buffer);