diff options
Diffstat (limited to 'toys/posix/logger.c')
-rw-r--r-- | toys/posix/logger.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/toys/posix/logger.c b/toys/posix/logger.c index 906d64f4..427a5f5c 100644 --- a/toys/posix/logger.c +++ b/toys/posix/logger.c @@ -26,6 +26,8 @@ config LOGGER GLOBALS( char *p, *t; + + int priority; ) // find str in names[], accepting unambiguous short matches @@ -48,9 +50,15 @@ static int arrayfind(char *str, char *names[], int len) return maybe; } +static void syslog_line(char **pline, long len) +{ + if (!pline) return; + syslog(TT.priority, "%s", *pline); +} + void logger_main(void) { - int facility = LOG_USER, priority = LOG_NOTICE, len = 0; + int facility = LOG_USER, len = 0; char *s1, *s2, **arg, *priorities[] = {"emerg", "alert", "crit", "error", "warning", "notice", "info", "debug"}, @@ -58,6 +66,7 @@ void logger_main(void) "lpr", "news", "uucp", "cron", "authpriv", "ftp"}; if (!TT.t) TT.t = xgetpwuid(geteuid())->pw_name; + TT.priority = LOG_NOTICE; if (TT.p) { if (!(s1 = strchr(TT.p, '.'))) s1 = TT.p; else { @@ -71,10 +80,11 @@ void logger_main(void) facility *= 8; } - priority = arrayfind(s1, priorities, ARRAY_LEN(priorities)); - if (priority<0) error_exit("bad priority: %s", s1); + TT.priority = arrayfind(s1, priorities, ARRAY_LEN(priorities)); + if (TT.priority<0) error_exit("bad priority: %s", s1); } + openlog(TT.t, LOG_PERROR*FLAG(s), facility); if (toys.optc) { for (arg = toys.optargs; *arg; arg++) len += strlen(*arg)+1; s1 = s2 = xmalloc(len); @@ -82,9 +92,7 @@ void logger_main(void) if (arg != toys.optargs) *s2++ = ' '; s2 = stpcpy(s2, *arg); } - } else toybuf[readall(0, s1 = toybuf, sizeof(toybuf)-1)] = 0; - - openlog(TT.t, LOG_PERROR*FLAG(s), facility); - syslog(priority, "%s", s1); + syslog(TT.priority, "%s", s1); + } else do_lines(0, '\n', syslog_line); closelog(); } |