diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-25 15:02:54 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-25 15:03:09 -0400 |
commit | 7e707c61ab0aaf36875bd6645c0898f15fbef0f9 (patch) | |
tree | bd699da6342d09214be994cf85f735c62abe82d3 /kernel/fs | |
parent | added assert that bump allocator is only being asked for one page at a time (diff) | |
download | comus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.tar.gz comus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.tar.bz2 comus-7e707c61ab0aaf36875bd6645c0898f15fbef0f9.zip |
fix fs off by 1 sector
Diffstat (limited to 'kernel/fs')
-rw-r--r-- | kernel/fs/fs.c | 6 |
1 files changed, 3 insertions, 3 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) |