summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
Diffstat (limited to 'kern')
-rw-r--r--kern/console.c17
-rw-r--r--kern/console.h2
2 files changed, 13 insertions, 6 deletions
diff --git a/kern/console.c b/kern/console.c
index e8c0c28a..d7104e47 100644
--- a/kern/console.c
+++ b/kern/console.c
@@ -136,17 +136,24 @@ console_register(struct console *console)
}
void
-console_intr(struct console *console, char c)
+console_intr(struct console *console, const char *s)
{
assert(!cpu_intr_enabled());
+ if (*s == '\0') {
+ return;
+ }
+
spinlock_lock(&console->lock);
- if (cbuf_size(&console->recvbuf) == cbuf_capacity(&console->recvbuf)) {
- goto out;
- }
+ while (*s != '\0') {
+ if (cbuf_size(&console->recvbuf) == cbuf_capacity(&console->recvbuf)) {
+ goto out;
+ }
- cbuf_push(&console->recvbuf, c);
+ cbuf_push(&console->recvbuf, *s);
+ s++;
+ }
if ((console->waiter != NULL) && (console->waiter != thread_self())) {
thread_wakeup(console->waiter);
diff --git a/kern/console.h b/kern/console.h
index b967c0dd..7455a051 100644
--- a/kern/console.h
+++ b/kern/console.h
@@ -81,7 +81,7 @@ void console_register(struct console *console);
*
* Interrupts must be disabled when calling this function.
*/
-void console_intr(struct console *console, char c);
+void console_intr(struct console *console, const char *s);
/*
* Write/read a single character to all registered console devices.