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