From 60821a3b74716b9e08f1b66a1a48bc65bfa2ea3e Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Mon, 1 Feb 2010 23:27:32 +0000 Subject: [PATCH] replace duplicate code with new function ap_parse_log_level() git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@905454 13f79535-47bb-0310-9956-ffa450edef68 --- include/ap_mmn.h | 3 ++- include/http_config.h | 8 ++++++++ modules/debugging/mod_dumpio.c | 31 +++---------------------------- server/core.c | 31 +++---------------------------- server/log.c | 19 +++++++++++++++++++ server/main.c | 27 +-------------------------- 6 files changed, 36 insertions(+), 83 deletions(-) diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 47c0bb6bfc..3eb0aebe15 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -212,6 +212,7 @@ * to proxy_ftp_dir_conf(mod_proxy_ftp) * 20091230.1 (2.3.5-dev) add util_ldap_state_t.opTimeout * 20091230.2 (2.3.5-dev) add ap_get_server_name_for_url() + * 20091230.3 (2.3.6-dev) add ap_parse_log_level() * */ @@ -220,7 +221,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20091230 #endif -#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 3 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/include/http_config.h b/include/http_config.h index 4daf3d8c6e..ff6e5e1732 100644 --- a/include/http_config.h +++ b/include/http_config.h @@ -490,6 +490,14 @@ AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd, void *struct_ptr, const char *arg); +/** + * Parsing function for log level + * @param str The string to parse + * @param val The parsed log level + * @return An error string or NULL on success + */ +AP_DECLARE(const char *) ap_parse_log_level(const char *str, int *val); + /** * Return true if the specified method is limited by being listed in * a <Limit> container, or by *not* being listed in a <LimitExcept> diff --git a/modules/debugging/mod_dumpio.c b/modules/debugging/mod_dumpio.c index 56a34ae8cf..209be72ff0 100644 --- a/modules/debugging/mod_dumpio.c +++ b/modules/debugging/mod_dumpio.c @@ -244,34 +244,9 @@ static const char *set_loglevel(cmd_parms *cmd, void *dummy, const char *arg) } if ((str = ap_getword_conf(cmd->pool, &arg))) { - if (!strcasecmp(str, "emerg")) { - ptr->loglevel = APLOG_EMERG; - } - else if (!strcasecmp(str, "alert")) { - ptr->loglevel = APLOG_ALERT; - } - else if (!strcasecmp(str, "crit")) { - ptr->loglevel = APLOG_CRIT; - } - else if (!strcasecmp(str, "error")) { - ptr->loglevel = APLOG_ERR; - } - else if (!strcasecmp(str, "warn")) { - ptr->loglevel = APLOG_WARNING; - } - else if (!strcasecmp(str, "notice")) { - ptr->loglevel = APLOG_NOTICE; - } - else if (!strcasecmp(str, "info")) { - ptr->loglevel = APLOG_INFO; - } - else if (!strcasecmp(str, "debug")) { - ptr->loglevel = APLOG_DEBUG; - } - else { - return "DumpIOLogLevel requires level keyword: one of " - "emerg/alert/crit/error/warn/notice/info/debug"; - } + err = ap_parse_log_level(str, &ptr->loglevel); + if (err != NULL) + return err; } else { return "DumpIOLogLevel requires level keyword"; diff --git a/server/core.c b/server/core.c index b33c99e364..5824ae37c9 100644 --- a/server/core.c +++ b/server/core.c @@ -2626,34 +2626,9 @@ static const char *set_loglevel(cmd_parms *cmd, void *dummy, const char *arg) } if ((str = ap_getword_conf(cmd->pool, &arg))) { - if (!strcasecmp(str, "emerg")) { - cmd->server->loglevel = APLOG_EMERG; - } - else if (!strcasecmp(str, "alert")) { - cmd->server->loglevel = APLOG_ALERT; - } - else if (!strcasecmp(str, "crit")) { - cmd->server->loglevel = APLOG_CRIT; - } - else if (!strcasecmp(str, "error")) { - cmd->server->loglevel = APLOG_ERR; - } - else if (!strcasecmp(str, "warn")) { - cmd->server->loglevel = APLOG_WARNING; - } - else if (!strcasecmp(str, "notice")) { - cmd->server->loglevel = APLOG_NOTICE; - } - else if (!strcasecmp(str, "info")) { - cmd->server->loglevel = APLOG_INFO; - } - else if (!strcasecmp(str, "debug")) { - cmd->server->loglevel = APLOG_DEBUG; - } - else { - return "LogLevel requires level keyword: one of " - "emerg/alert/crit/error/warn/notice/info/debug"; - } + err = ap_parse_log_level(arg, &cmd->server->loglevel); + if (err != NULL) + return err; } else { return "LogLevel requires level keyword"; diff --git a/server/log.c b/server/log.c index 7e224a6d02..c3abd5a8d4 100644 --- a/server/log.c +++ b/server/log.c @@ -1127,6 +1127,25 @@ AP_DECLARE(void) ap_close_piped_log(piped_log *pl) apr_pool_cleanup_run(pl->p, pl, piped_log_cleanup); } +AP_DECLARE(const char *) ap_parse_log_level(const char *str, int *val) +{ + char *err = "Loglevel keyword must be one of emerg/alert/crit/error/warn/" + "notice/info/debug"; + int i = 0; + + if (str == NULL) + return err; + + while (priorities[i].t_name != NULL) { + if (!strcasecmp(str, priorities[i].t_name)) { + *val = priorities[i].t_val; + return NULL; + } + i++; + } + return err; +} + AP_IMPLEMENT_HOOK_VOID(error_log, (const char *file, int line, int level, apr_status_t status, const server_rec *s, diff --git a/server/main.c b/server/main.c index d80ec62ade..65fac67f2d 100644 --- a/server/main.c +++ b/server/main.c @@ -530,33 +530,8 @@ int main(int argc, const char * const argv[]) break; case 'e': - if (strcasecmp(optarg, "emerg") == 0) { - ap_default_loglevel = APLOG_EMERG; - } - else if (strcasecmp(optarg, "alert") == 0) { - ap_default_loglevel = APLOG_ALERT; - } - else if (strcasecmp(optarg, "crit") == 0) { - ap_default_loglevel = APLOG_CRIT; - } - else if (strncasecmp(optarg, "err", 3) == 0) { - ap_default_loglevel = APLOG_ERR; - } - else if (strncasecmp(optarg, "warn", 4) == 0) { - ap_default_loglevel = APLOG_WARNING; - } - else if (strcasecmp(optarg, "notice") == 0) { - ap_default_loglevel = APLOG_NOTICE; - } - else if (strcasecmp(optarg, "info") == 0) { - ap_default_loglevel = APLOG_INFO; - } - else if (strcasecmp(optarg, "debug") == 0) { - ap_default_loglevel = APLOG_DEBUG; - } - else { + if (ap_parse_log_level(optarg, &ap_default_loglevel) != NULL) usage(process); - } break; case 'E': -- 2.40.0