<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>
<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>
</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
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;
}
}
"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"),