#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); }