New function: gw_log_mask_str.
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 1 Dec 1995 12:24:14 +0000 (12:24 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 1 Dec 1995 12:24:14 +0000 (12:24 +0000)
include/gw-log.h
res+log/gw-log.c

index c28ffa2..9c8b207 100644 (file)
  * 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"<n> 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.
index 828337d..3a5e6f5 100644 (file)
  * 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 <unistd.h>
 #include <time.h>
 #include <errno.h>
+#include <ctype.h>
 
 #include <gw-log.h>
 
@@ -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;
+}