diff --git a/log.c b/log.c index dc1d723..f80e6d4 100644 --- a/log.c +++ b/log.c @@ -29,10 +29,10 @@ #include "log.h" static FILE *log_fp = NULL; -static int default_log_level = E_WARN; +static const int _default_log_level = E_WARN; int log_level[L_MAX]; -char *facility_name[] = { +const char *facility_name[] = { "general", "artwork", "database", @@ -45,7 +45,7 @@ char *facility_name[] = { 0 }; -char *level_name[] = { +const char *level_name[] = { "off", // E_OFF "fatal", // E_FATAL "error", // E_ERROR @@ -63,60 +63,58 @@ log_close(void) fclose(log_fp); } +int find_matching_name(const char* str, const char* names[]) { + if (str == NULL) return -1; + + const char* start = strpbrk(str, ",="); + int level, c = (start != NULL) ? start - str : strlen(str); + for (level = 0; names[level] != 0; level++) { + if (!(strncasecmp(names[level], str, c))) + return level; + } + return -1; +} + int log_init(const char *fname, const char *debug) { int i; FILE *fp; - short int log_level_set[L_MAX]; + + int level = find_matching_name(debug, level_name); + int default_log_level = (level == -1) ? _default_log_level : level; + + for (i=0; i