]> granicus.if.org Git - apache/commitdiff
Replace the Define !FOO syntax by a new UnDefine directive.
authorStefan Fritsch <sf@apache.org>
Sat, 30 Jan 2010 19:22:41 +0000 (19:22 +0000)
committerStefan Fritsch <sf@apache.org>
Sat, 30 Jan 2010 19:22:41 +0000 (19:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@904853 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/core.xml
server/core.c

index 79e47416c6fabf6f3b9c6868b33a0235ad511ae5..19f40a190a58739f09ae934de1c924926ac6ac3f 100644 (file)
@@ -596,8 +596,8 @@ which no other media type configuration could be found.
 
 <directivesynopsis>
 <name>Define</name>
-<description>Define or undefine the existence of a variable</description>
-<syntax>Define [!]<var>parameter-name</var></syntax>
+<description>Define the existence of a variable</description>
+<syntax>Define <var>parameter-name</var></syntax>
 <contextlist><context>server config</context></contextlist>
 
 <usage>
@@ -606,8 +606,6 @@ which no other media type configuration could be found.
     <p>This directive can be used to toggle the use of <directive module="core"
     type="section">IfDefine</directive> sections without needing to alter
     <code>-D</code> arguments in any startup scripts.</p>
-    <p>If the parameter-name is prefixed with a <code>!</code>, the definition
-    of the argument is removed.</p>
 </usage>
 </directivesynopsis>
 
@@ -3400,6 +3398,21 @@ requests</description>
 </usage>
 </directivesynopsis>
 
+<directivesynopsis>
+<name>UnDefine</name>
+<description>Undefine the existence of a variable</description>
+<syntax>UnDefine <var>parameter-name</var></syntax>
+<contextlist><context>server config</context></contextlist>
+
+<usage>
+    <p>Undoes the effect of a <directive module="core">Define</directive> or
+    of passing a <code>-D</code> argument to <program>httpd</program>.</p>
+    <p>This directive can be used to toggle the use of <directive module="core"
+    type="section">IfDefine</directive> sections without needing to alter
+    <code>-D</code> arguments in any startup scripts.</p>
+</usage>
+</directivesynopsis>
+
 <directivesynopsis>
 <name>UseCanonicalName</name>
 <description>Configures how the server determines its own name and
index 8d2e20579e2d734cc49013260c2c62fda82cc157..b33c99e364924ba7714bcc72962e1303d3417b72 100644 (file)
@@ -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"),