summaryrefslogtreecommitdiffstats
path: root/server/core.c
diff options
context:
space:
mode:
authorStefan Fritsch <sf@apache.org>2010-01-30 20:22:41 +0100
committerStefan Fritsch <sf@apache.org>2010-01-30 20:22:41 +0100
commit6856b147a78dafb92de9f19f36c6585e50685e4b (patch)
tree1a1a7f770038233d1d06a9eff34d74c9d84aafcf /server/core.c
parentAllow the Define directive to undefine a variable by prefixing the (diff)
downloadapache2-6856b147a78dafb92de9f19f36c6585e50685e4b.tar.xz
apache2-6856b147a78dafb92de9f19f36c6585e50685e4b.zip
Replace the Define !FOO syntax by a new UnDefine directive.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@904853 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server/core.c')
-rw-r--r--server/core.c49
1 files changed, 24 insertions, 25 deletions
diff --git a/server/core.c b/server/core.c
index 8d2e20579e..b33c99e364 100644
--- a/server/core.c
+++ b/server/core.c
@@ -1102,39 +1102,36 @@ static const char *set_access_name(cmd_parms *cmd, void *dummy,
static const char *set_define(cmd_parms *cmd, void *dummy,
- const char *optarg)
+ const char *optarg)
{
- int remove = 0;
-
- const char *err = ap_check_cmd_context(cmd,
- GLOBAL_ONLY);
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
if (err != NULL) {
return err;
}
- if (*optarg == '!') {
- remove = 1;
- optarg++;
- }
-
- if (remove == 0 && !ap_exists_config_define(optarg)) {
+ if (!ap_exists_config_define(optarg)) {
char **newv = (char **)apr_array_push(ap_server_config_defines);
*newv = apr_pstrdup(cmd->pool, optarg);
}
- else if (remove == 1) {
- int i;
- char **defines = (char **)ap_server_config_defines->elts;
- for (i = 0; i < ap_server_config_defines->nelts; i++) {
- if (strcmp(defines[i], optarg) == 0) {
- if (i == ap_server_config_defines->nelts - 1) {
- apr_array_pop(ap_server_config_defines);
- break;
- }
- else {
- defines[i] = apr_array_pop(ap_server_config_defines);
- break;
- }
- }
+
+ return NULL;
+}
+
+static const char *unset_define(cmd_parms *cmd, void *dummy,
+ const char *optarg)
+{
+ int i;
+ char **defines;
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ defines = (char **)ap_server_config_defines->elts;
+ for (i = 0; i < ap_server_config_defines->nelts; i++) {
+ if (strcmp(defines[i], optarg) == 0) {
+ defines[i] = apr_array_pop(ap_server_config_defines);
+ break;
}
}
@@ -3263,6 +3260,8 @@ AP_INIT_TAKE1("AcceptPathInfo", set_accept_path_info, NULL, OR_FILEINFO,
"Set to on or off for PATH_INFO to be accepted by handlers, or default for the per-handler preference"),
AP_INIT_TAKE1("Define", set_define, NULL, RSRC_CONF,
"Define the existance of a variable. Same as passing -D to the command line."),
+AP_INIT_TAKE1("UnDefine", unset_define, NULL, RSRC_CONF,
+ "Undefine the existance of a variable. Undo a Define."),
AP_INIT_RAW_ARGS("<If", ifsection, NULL, OR_ALL,
"Container for directives to be conditionally applied"),