From d1ff7bcc91886626dc9060ec5fb67ee102ab7c1d Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Mon, 11 Mar 2024 21:30:31 -0400 Subject: usermode capable kernel with logging syscall --- io/log.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 io/log.c (limited to 'io/log.c') diff --git a/io/log.c b/io/log.c new file mode 100644 index 0000000..14397a7 --- /dev/null +++ b/io/log.c @@ -0,0 +1,68 @@ +#include "log.h" +#include "lib/jove.h" +#include "lib/string.h" +#include "lib/format.h" + +static struct LogDevice *s_first_logdev = NULL; + +void +klog_newdev(struct LogDevice *dev) +{ + if(s_first_logdev == NULL) { + s_first_logdev = dev; + }else{ + dev->chain = s_first_logdev; + s_first_logdev = dev; + } +} + +static void +s_klogc(struct LogDevice *dev, char c) +{ + dev->out(&c, 1); + if(dev->chain != NULL) + s_klogc(dev->chain, c); +} + +void +klogc(char c) +{ + s_klogc(s_first_logdev, c); +} + +static void +s_klogs(struct LogDevice *dev, const char *s, size_t slen) +{ + dev->out(s, slen); + if(dev->chain != NULL) + s_klogs(dev->chain, s, slen); +} + +void +klogs(const char *s) +{ + size_t slen = strlen(s); + s_klogs(s_first_logdev, s, slen); +} + +void +klogsn(const char *s, size_t len) +{ + s_klogs(s_first_logdev, s, len); +} + +void +kvlogf(const char *fmt, va_list ap) +{ + char buffer[256]; + svfmt(buffer, 256, fmt, ap); + klogs(buffer); +} + +void klogf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + kvlogf(fmt, ap); + va_end(ap); +} -- cgit v1.2.1