X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/2236410f4582ab45ae8c384dd6eeeef5d10aab15..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/kernel/fs/twimap.c?ds=sidebyside diff --git a/lunaix-os/kernel/fs/twimap.c b/lunaix-os/kernel/fs/twimap.c index 6b74ad3..dff2de3 100644 --- a/lunaix-os/kernel/fs/twimap.c +++ b/lunaix-os/kernel/fs/twimap.c @@ -6,9 +6,9 @@ #include #include -#include +#include -#define TWIMAP_BUFFER_SIZE MEM_PAGE +#define TWIMAP_BUFFER_SIZE PAGE_SIZE void __twimap_default_reset(struct twimap* map) @@ -32,23 +32,29 @@ __twimap_file_read(struct v_inode* inode, void* buf, size_t len, size_t fpos) static int __twimap_file_read_page(struct v_inode* inode, void* buf, size_t fpos) { - return __twimap_file_read(inode, buf, MEM_PAGE, fpos); + return __twimap_file_read(inode, buf, PAGE_SIZE, fpos); } int twimap_read(struct twimap* map, void* buffer, size_t len, size_t fpos) { map->buffer = valloc(TWIMAP_BUFFER_SIZE); + map->size_acc = 0; + map->reset(map); // FIXME what if TWIMAP_BUFFER_SIZE is not big enough? - size_t pos = 0; - do { + size_t pos = map->size_acc; + while (pos <= fpos) { map->size_acc = 0; map->read(map); pos += map->size_acc; - } while (pos <= fpos && map->go_next(map)); + + if (!map->go_next(map)) { + break; + } + } if (pos <= fpos) { vfree(map->buffer);