git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: separate any i/o to sequential device from caching layer
[lunaix-os.git]
/
lunaix-os
/
kernel
/
lxconsole.c
diff --git
a/lunaix-os/kernel/lxconsole.c
b/lunaix-os/kernel/lxconsole.c
index 894a1b8e9837d636bbca6bf1a65355000b5316c4..e43ebc5883e11b496a3826f1ade11af34ba3f485 100644
(file)
--- a/
lunaix-os/kernel/lxconsole.c
+++ b/
lunaix-os/kernel/lxconsole.c
@@
-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_add
seq
(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;