fix: separate any i/o to sequential device from caching layer
[lunaix-os.git] / lunaix-os / kernel / lxconsole.c
index 894a1b8e9837d636bbca6bf1a65355000b5316c4..e43ebc5883e11b496a3826f1ade11af34ba3f485 100644 (file)
@@ -36,7 +36,7 @@ lxconsole_init()
 
     lx_console.flush_timer = NULL;
 
 
     lx_console.flush_timer = NULL;
 
-    struct device* tty_dev = device_add(NULL, &lx_console, "tty");
+    struct device* tty_dev = device_addseq(NULL, &lx_console, "tty");
     tty_dev->write = __tty_write;
 }
 
     tty_dev->write = __tty_write;
 }
 
@@ -126,12 +126,19 @@ console_write(struct console* console, uint8_t* data, size_t size)
 
     char c;
     int lines = 0;
 
     char c;
     int lines = 0;
+    int j = 0;
     for (size_t i = 0; i < size; i++) {
         c = data[i];
     for (size_t i = 0; i < size; i++) {
         c = data[i];
-        buffer[(ptr + i) % console->buffer.size] = c;
+        if (!c) {
+            continue;
+        }
+        buffer[(ptr + j) % console->buffer.size] = c;
         lines += (c == '\n');
         lines += (c == '\n');
+        j++;
     }
 
     }
 
+    size = j;
+
     uintptr_t new_ptr = (ptr + size) % console->buffer.size;
     console->buffer.wr_pos = new_ptr;
 
     uintptr_t new_ptr = (ptr + size) % console->buffer.size;
     console->buffer.wr_pos = new_ptr;