feat: owloysius - dynamic init function invocator
[lunaix-os.git] / lunaix-os / kernel / fs / twimap.c
index 009cdf319ef8fce97cc69e4ca5b3420a0096286d..6b74ad33686661f0bf805cbbd03d3766e016ebc9 100644 (file)
@@ -3,10 +3,12 @@
 #include <lunaix/mm/valloc.h>
 #include <lunaix/spike.h>
 
-#include <klibc/stdio.h>
+#include <klibc/strfmt.h>
 #include <klibc/string.h>
 
-#define TWIMAP_BUFFER_SIZE 1024
+#include <sys/mm/mempart.h>
+
+#define TWIMAP_BUFFER_SIZE MEM_PAGE
 
 void
 __twimap_default_reset(struct twimap* map)
@@ -20,13 +22,19 @@ __twimap_default_gonext(struct twimap* map)
     return 0;
 }
 
-int
+static int
 __twimap_file_read(struct v_inode* inode, void* buf, size_t len, size_t fpos)
 {
     struct twimap* map = (struct twimap*)(inode->data);
     return twimap_read(map, buf, len, 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);
+}
+
 int
 twimap_read(struct twimap* map, void* buffer, size_t len, size_t fpos)
 {
@@ -62,6 +70,11 @@ twimap_read(struct twimap* map, void* buffer, size_t len, size_t fpos)
         acc_size += rdlen;
     }
 
+    if (acc_size <= len - 1) {
+        // pad zero
+        *(char*)(buffer + acc_size + 1) = 0;
+    }
+
     vfree(map->buffer);
     return acc_size;
 }
@@ -74,8 +87,7 @@ twimap_printf(struct twimap* mapping, const char* fmt, ...)
 
     char* buf = mapping->buffer + mapping->size_acc;
 
-    mapping->size_acc +=
-      __ksprintf_internal(buf, fmt, TWIMAP_BUFFER_SIZE, args);
+    mapping->size_acc += ksnprintfv(buf, fmt, TWIMAP_BUFFER_SIZE, args) - 1;
 
     va_end(args);
 }
@@ -112,6 +124,7 @@ twimap_create(void* data)
 
 struct v_file_ops twimap_file_ops = { .close = default_file_close,
                                       .read = __twimap_file_read,
+                                      .read_page = __twimap_file_read_page,
                                       .readdir = default_file_readdir,
                                       .seek = default_file_seek,
                                       .write = default_file_write };
\ No newline at end of file