Add init script for ceod
[mspang/pyceo.git] / src / util.c
index 3078d23..3987ca4 100644 (file)
 #include "strbuf.h"
 
 static int log_stderr = 1;
+static int log_maxprio = LOG_DEBUG;
 
-void init_log(const char *ident, int option, int facility) {
+void init_log(const char *ident, int option, int facility, int lstderr) {
     openlog(ident, option, facility);
-    log_stderr = isatty(STDERR_FILENO);
+    log_stderr = lstderr || isatty(STDERR_FILENO);
+}
+
+void log_set_maxprio(int prio) {
+    log_maxprio = prio;
 }
 
 static void errmsg(int prio, const char *prefix, const char *fmt, va_list args) {
@@ -27,8 +32,10 @@ static void errmsg(int prio, const char *prefix, const char *fmt, va_list args)
     strbuf_addch(&msg, '\n');
 
     syslog(prio, "%s", msg.buf);
-    if (log_stderr)
+    if (log_stderr && prio <= log_maxprio)
         fputs(msg.buf, stderr);
+
+    strbuf_release(&msg);
 }
 
 static void errmsgpe(int prio, const char *prefix, const char *fmt, va_list args) {
@@ -39,8 +46,10 @@ static void errmsgpe(int prio, const char *prefix, const char *fmt, va_list args
     strbuf_addf(&msg, ": %s\n", strerror(errno));
 
     syslog(prio, "%s", msg.buf);
-    if (log_stderr)
+    if (log_stderr && prio <= log_maxprio)
         fputs(msg.buf, stderr);
+
+    strbuf_release(&msg);
 }
 
 NORETURN static void die(int prio, const char *prefix, const char *msg, va_list args) {
@@ -94,7 +103,7 @@ void logmsg(int priority, const char *msg, ...) {
     vsyslog(priority, msg, args);
     va_end(args);
     va_start(args, msg);
-    if (log_stderr) {
+    if (log_stderr && priority <= log_maxprio) {
         vfprintf(stderr, msg, args);
         fputc('\n', stderr);
     }