Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git] / lunaix-os / kernel / fs / twimap.c
index 6b74ad33686661f0bf805cbbd03d3766e016ebc9..dff2de3f769569b0c6582e0193dc05d1ea148a90 100644 (file)
@@ -6,9 +6,9 @@
 #include <klibc/strfmt.h>
 #include <klibc/string.h>
 
-#include <sys/mm/mempart.h>
+#include <sys/mm/pagetable.h>
 
-#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);