diff options
author | Ian Moffett <ian@osmora.org> | 2024-01-17 20:47:30 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-01-17 20:47:30 -0500 |
commit | 09f3fd474c0175170c177cdcb372034eda86c70f (patch) | |
tree | 2d8615a3910ec4164a6b7df6d629893e2b3fd5fd | |
parent | e5169021862bf7586619194712dcfa2a12c6187c (diff) |
kernel: syslog: Better abstract logging
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/kern/kern_syslog.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/sys/kern/kern_syslog.c b/sys/kern/kern_syslog.c index fd131b2..ebc5512 100644 --- a/sys/kern/kern_syslog.c +++ b/sys/kern/kern_syslog.c @@ -33,6 +33,17 @@ static struct tty syslog_tty; +/* False if we don't log to a console */ +static bool is_conlog_init = false; + +static void +syslog_write(const char *s, size_t len) +{ + if (is_conlog_init) { + tty_write(&syslog_tty, s, len); + } +} + static void syslog_handle_fmt(va_list *ap, char fmt_spec) { @@ -44,21 +55,21 @@ syslog_handle_fmt(va_list *ap, char fmt_spec) switch (fmt_spec) { case 'c': tmp_ch = va_arg(*ap, int); - tty_write(&syslog_tty, &tmp_ch, 1); + syslog_write(&tmp_ch, 1); break; case 's': tmp_str = va_arg(*ap, const char *); - tty_write(&syslog_tty, tmp_str, strlen(tmp_str)); + syslog_write(tmp_str, strlen(tmp_str)); break; case 'd': tmp_int = va_arg(*ap, int64_t); itoa(tmp_int, tmp_buf, 10); - tty_write(&syslog_tty, tmp_buf, strlen(tmp_buf)); + syslog_write(tmp_buf, strlen(tmp_buf)); break; case 'x': tmp_int = va_arg(*ap, uint64_t); itoa(tmp_int, tmp_buf, 16); - tty_write(&syslog_tty, tmp_buf + 2, strlen(tmp_buf) - 2); + syslog_write(tmp_buf + 2, strlen(tmp_buf) - 2); break; } } @@ -71,7 +82,7 @@ vkprintf(const char *fmt, va_list *ap) ++fmt; syslog_handle_fmt(ap, *fmt++); } else { - tty_write(&syslog_tty, fmt++, 1); + syslog_write(fmt++, 1); } } } @@ -89,6 +100,8 @@ kprintf(const char *fmt, ...) void syslog_init(void) { + is_conlog_init = true; + tty_set_defaults(&syslog_tty); tty_attach(&syslog_tty); } |