123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*
- * This file is part of the zlog Library.
- *
- * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com>
- *
- * Licensed under the LGPL v2.1, see the file COPYING in base directory.
- */
- #include <stdio.h>
- #include <ctype.h>
- #include <errno.h>
- #include "syslog.h"
- #include "zc_defs.h"
- #include "level.h"
- void zlog_level_profile(zlog_level_t *a_level, int flag)
- {
- zc_assert(a_level,);
- zc_profile(flag, "---level[%p][%d,%s,%s,%d,%d]---",
- a_level,
- a_level->int_level,
- a_level->str_uppercase,
- a_level->str_lowercase,
- (int) a_level->str_len,
- a_level->syslog_level);
- return;
- }
- /*******************************************************************************/
- void zlog_level_del(zlog_level_t *a_level)
- {
- zc_assert(a_level,);
- zc_debug("zlog_level_del[%p]", a_level);
- free(a_level);
- return;
- }
- static int syslog_level_atoi(char *str)
- {
- /* guess no unix system will choose -187
- * as its syslog level, so it is a safe return value
- */
- zc_assert(str, -187);
- if (STRICMP(str, ==, "LOG_EMERG"))
- return LOG_EMERG;
- if (STRICMP(str, ==, "LOG_ALERT"))
- return LOG_ALERT;
- if (STRICMP(str, ==, "LOG_CRIT"))
- return LOG_CRIT;
- if (STRICMP(str, ==, "LOG_ERR"))
- return LOG_ERR;
- if (STRICMP(str, ==, "LOG_WARNING"))
- return LOG_WARNING;
- if (STRICMP(str, ==, "LOG_NOTICE"))
- return LOG_NOTICE;
- if (STRICMP(str, ==, "LOG_INFO"))
- return LOG_INFO;
- if (STRICMP(str, ==, "LOG_DEBUG"))
- return LOG_DEBUG;
- zc_error("wrong syslog level[%s]", str);
- return -187;
- }
- /* line: TRACE = 10, LOG_ERR */
- zlog_level_t *zlog_level_new(char *line)
- {
- zlog_level_t *a_level = NULL;
- int i;
- int nscan;
- char str[MAXLEN_CFG_LINE + 1];
- int l = 0;
- char sl[MAXLEN_CFG_LINE + 1];
- zc_assert(line, NULL);
- memset(str, 0x00, sizeof(str));
- memset(sl, 0x00, sizeof(sl));
- nscan = sscanf(line, " %[^= \t] = %d ,%s", str, &l, sl);
- if (nscan < 2) {
- zc_error("level[%s], syntax wrong", line);
- return NULL;
- }
- /* check level and str */
- if ((l < 0) || (l > 255)) {
- zc_error("l[%d] not in [0,255], wrong", l);
- return NULL;
- }
- if (str[0] == '\0') {
- zc_error("str[0] = 0");
- return NULL;
- }
- a_level = calloc(1, sizeof(zlog_level_t));
- if (!a_level) {
- zc_error("calloc fail, errno[%d]", errno);
- return NULL;
- }
- a_level->int_level = l;
- /* fill syslog level */
- if (sl[0] == '\0') {
- a_level->syslog_level = LOG_DEBUG;
- } else {
- a_level->syslog_level = syslog_level_atoi(sl);
- if (a_level->syslog_level == -187) {
- zc_error("syslog_level_atoi fail");
- goto err;
- }
- }
- /* strncpy and toupper(str) */
- for (i = 0; (i < sizeof(a_level->str_uppercase) - 1) && str[i] != '\0'; i++) {
- (a_level->str_uppercase)[i] = toupper(str[i]);
- (a_level->str_lowercase)[i] = tolower(str[i]);
- }
- if (str[i] != '\0') {
- /* overflow */
- zc_error("not enough space for str, str[%s] > %d", str, i);
- goto err;
- } else {
- (a_level->str_uppercase)[i] = '\0';
- (a_level->str_lowercase)[i] = '\0';
- }
- a_level->str_len = i;
- //zlog_level_profile(a_level, ZC_DEBUG);
- return a_level;
- err:
- zc_error("line[%s]", line);
- zlog_level_del(a_level);
- return NULL;
- }
|