summaryrefslogtreecommitdiffstats
path: root/syslog.c
diff options
context:
space:
mode:
Diffstat (limited to 'syslog.c')
-rw-r--r--syslog.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/syslog.c b/syslog.c
index 01b6e7e..dbb7a5a 100644
--- a/syslog.c
+++ b/syslog.c
@@ -63,6 +63,12 @@ void log_add(char *buf, int size, int source)
int priority = 0;
int ret;
+ /* bounce out if we don't have init'ed yet (regmatch etc will blow) */
+ if (!log) {
+ fprintf(stderr, buf);
+ return;
+ }
+
/* strip trailing newline */
if (buf[size - 2] == '\n') {
buf[size - 2] = '\0';
@@ -121,6 +127,34 @@ void log_add(char *buf, int size, int source)
newest = next;
}
+void log_printf(char *fmt, ...)
+{
+ static int buffer_len = 128;
+ static char *buffer;
+ va_list ap;
+ int n = 0;
+
+ do {
+ if (n)
+ buffer_len = n + 1;
+ if (!buffer)
+ buffer = malloc(buffer_len);
+ if (!buffer)
+ return;
+ va_start(ap, fmt);
+ n = vsnprintf(buffer, sizeof(buffer), fmt, ap);
+ va_end(ap);
+ if (n < 1)
+ return;
+ if (n >= buffer_len) {
+ free(buffer);
+ buffer = NULL;
+ }
+ } while (n >= buffer_len);
+
+ log_add(buffer, n, SOURCE_INTERNAL);
+}
+
static void slog_cb(struct ustream *s, int bytes)
{
struct ustream_buf *buf = s->r.head;