From 3ac0f5a14ccdf730f747a77d320d2fe43bbcf3f6 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 1 Dec 1995 12:24:14 +0000 Subject: [PATCH] New function: gw_log_mask_str. --- include/gw-log.h | 16 +++++++++++++- res+log/gw-log.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/include/gw-log.h b/include/gw-log.h index c28ffa2..9c8b207 100644 --- a/include/gw-log.h +++ b/include/gw-log.h @@ -48,7 +48,10 @@ * Europagate, 1994-1995. * * $Log: gw-log.h,v $ - * Revision 1.7 1995/05/16 09:39:39 adam + * Revision 1.8 1995/12/01 12:24:14 adam + * New function: gw_log_mask_str. + * + * Revision 1.7 1995/05/16 09:39:39 adam * LICENSE. * * Revision 1.6 1995/03/30 07:32:42 adam @@ -140,6 +143,17 @@ int gw_log (unsigned level, const char *event_type, const char *format, ...); This function returns 0 on success; -1 on failure. */ +unsigned gw_log_mask_str (const char *str); +/* + Return the log level corresponding to str. + str is a comma separated sequence of tokens. A token is one of: + "all", "default", "def", "fatal", "warn", "stat", "debug", "none" + or "debug" where n is 0..9. + The level of each token are ORed with initial level being GW_LOG_DEFAULT + unless first token is "none" in which case the initial level is 0 (none). + */ + + char *gw_strdup (const char *s); /* Works as strdup(3s), which is not defined by ANSI. diff --git a/res+log/gw-log.c b/res+log/gw-log.c index 828337d..3a5e6f5 100644 --- a/res+log/gw-log.c +++ b/res+log/gw-log.c @@ -47,7 +47,10 @@ * Europagate, 1994-1995. * * $Log: gw-log.c,v $ - * Revision 1.11 1995/11/09 09:54:28 adam + * Revision 1.12 1995/12/01 12:24:17 adam + * New function: gw_log_mask_str. + * + * Revision 1.11 1995/11/09 09:54:28 adam * More readable logging format. * * Revision 1.10 1995/05/16 09:40:48 adam @@ -89,6 +92,7 @@ #include #include #include +#include #include @@ -237,3 +241,59 @@ int gw_log (unsigned level_a, const char *event_type, const char *format, ...) va_end (ap); return err; } + +static struct { + int mask; + char *name; +} mask_names[] = +{ + { GW_LOG_ALL, "all" }, + { GW_LOG_DEFAULT, "default"}, + { GW_LOG_DEFAULT, "def" }, + { GW_LOG_FATAL, "fatal" }, + { GW_LOG_WARN, "warn" }, + { GW_LOG_ACCT, "acct" }, + { GW_LOG_STAT, "stat" }, + { GW_LOG_DEBUG, "debug" }, + { GW_LOG_DEBUGN(0), "debug0" }, + { GW_LOG_DEBUGN(1), "debug1" }, + { GW_LOG_DEBUGN(2), "debug2" }, + { GW_LOG_DEBUGN(3), "debug3" }, + { GW_LOG_DEBUGN(4), "debug4" }, + { GW_LOG_DEBUGN(5), "debug5" }, + { GW_LOG_DEBUGN(6), "debug6" }, + { GW_LOG_DEBUGN(7), "debug7" }, + { GW_LOG_DEBUGN(8), "debug8" }, + { GW_LOG_DEBUGN(8), "debug9" }, + { 0, "none" }, + { 0, NULL } +}; + +unsigned gw_log_mask_str (const char *str) +{ + const char *p; + int i; + unsigned level = GW_LOG_DEFAULT; + + while (*str) + { + for (p = str; *p && *p != ','; p++) + ; + if (*str == '-' || isdigit(*str)) + level = atoi (str); + else + for (i = 0; mask_names[i].name; i++) + if (strlen (mask_names[i].name) == p-str && + memcmp (mask_names[i].name, str, p-str) == 0) + { + if (mask_names[i].mask) + level |= mask_names[i].mask; + else + level = 0; + } + if (*p == ',') + p++; + str = p; + } + return level; +} -- 1.7.10.4