diff options
Diffstat (limited to 'toys/pending/logger.c')
-rw-r--r-- | toys/pending/logger.c | 72 |
1 files changed, 27 insertions, 45 deletions
diff --git a/toys/pending/logger.c b/toys/pending/logger.c index af035193..87e204d2 100644 --- a/toys/pending/logger.c +++ b/toys/pending/logger.c @@ -18,23 +18,18 @@ config LOGGER #define FOR_logger #include "toys.h" #include <syslog.h> -#include <strings.h> -#include <string.h> GLOBALS( char *priority_arg; char *ident; - - int facility; - int priority; ) struct mapping { - const char *key; + char *key; int value; }; -static const struct mapping facilities[] = { +static struct mapping facilities[] = { {"user", LOG_USER}, {"main", LOG_MAIL}, {"news", LOG_NEWS}, {"uucp", LOG_UUCP}, {"daemon", LOG_DAEMON}, {"auth", LOG_AUTH}, {"cron", LOG_CRON}, {"lpr", LOG_LPR}, {"local0", LOG_LOCAL0}, @@ -44,64 +39,51 @@ static const struct mapping facilities[] = { {NULL, 0} }; -static const struct mapping priorities[] = { +static struct mapping priorities[] = { {"emerg", LOG_EMERG}, {"alert", LOG_ALERT}, {"crit", LOG_CRIT}, {"err", LOG_ERR}, {"warning", LOG_WARNING}, {"notice", LOG_NOTICE}, {"info", LOG_INFO}, {"debug", LOG_DEBUG}, {NULL, 0} }; -static int lookup(const struct mapping *where, const char *key) +static int lookup(struct mapping *where, char *key) { - int i; - for (i = 0; where[i].key; i++) - if (!strcasecmp(key, where[i].key)) - return where[i].value; + for (; where->key; where++) + if (!strcasecmp(key, where->key)) return where->value; return -1; } -static void parse_priority() +void logger_main(void) { - char *sep = strchr(TT.priority_arg, '.'); - - if (sep) - { - *sep = '\0'; - if ((TT.facility = lookup(facilities, TT.priority_arg)) == -1) - error_exit("bad facility: %s", TT.priority_arg); - TT.priority_arg = sep+1; - } + int facility = LOG_USER, priority = LOG_NOTICE; + char *message = NULL; - if ((TT.priority = lookup(priorities, TT.priority_arg)) == -1) - error_exit("bad priority: %s", TT.priority_arg); -} + if (toys.optflags & FLAG_p) { + char *sep = strchr(TT.priority_arg, '.'); -void logger_main(void) -{ - if (toys.optflags & FLAG_p) - parse_priority(); - else - { - TT.facility = LOG_USER; - TT.priority = LOG_NOTICE; + if (sep) { + *sep = '\0'; + if ((facility = lookup(facilities, TT.priority_arg)) == -1) + error_exit("bad facility: %s", TT.priority_arg); + TT.priority_arg = sep+1; + } + + if ((priority = lookup(priorities, TT.priority_arg)) == -1) + error_exit("bad priority: %s", TT.priority_arg); } - if (!(toys.optflags & FLAG_t)) - { + if (!(toys.optflags & FLAG_t)) { struct passwd *pw = getpwuid(geteuid()); - if (!pw) - perror_exit("getpwuid"); + + if (!pw) perror_exit("getpwuid"); TT.ident = xstrdup(pw->pw_name); } - char *message = NULL; if (toys.optc) { - int length = 0; - int pos = 0; + int length = 0, pos = 0; - for (;*toys.optargs; (void) *(toys.optargs)++) // shut up gcc - { + for (;*toys.optargs; toys.optargs++) { length += strlen(*(toys.optargs)) + 1; // plus one for the args spacing message = xrealloc(message, length + 1); // another one for the null byte @@ -113,7 +95,7 @@ void logger_main(void) message = toybuf; } - openlog(TT.ident, (toys.optflags & FLAG_s ? LOG_PERROR : 0) , TT.facility); - syslog(TT.priority, "%s", message); + openlog(TT.ident, (toys.optflags & FLAG_s ? LOG_PERROR : 0) , facility); + syslog(priority, "%s", message); closelog(); } |