summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorJim Jagielski <jim@apache.org>2016-06-06 19:11:04 +0000
committerJim Jagielski <jim@apache.org>2016-06-06 19:11:04 +0000
commitbac82022d7f42b903b95fcf31abdb24391cfb9bc (patch)
tree30651312efb32b96f6be2f5443ea80b74b82ef5a /server
parent97c5647d09bc46c4539028ac6a2c20ed728f0c7f (diff)
downloadhttpd-bac82022d7f42b903b95fcf31abdb24391cfb9bc.tar.gz
Merge r1744980 from trunk:
Save a few bytes in the conf pool. The directive's names don't need to be duplicated in this pool when parsing the configuration file. Either they match a known directive name and we can use it directly if needed. Otherwise, it is still possible to make a copy afterwards. Submitted by: jailletc36 Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1747055 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server')
-rw-r--r--server/config.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/server/config.c b/server/config.c
index bca8b53cfd..2f652e8eec 100644
--- a/server/config.c
+++ b/server/config.c
@@ -1115,7 +1115,11 @@ static const char *ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool,
args = ap_resolve_env(temp_pool, l);
#endif
- cmd_name = ap_getword_conf(p, &args);
+ /* The first word is the name of a directive. We can safely use the
+ * 'temp_pool' for it. If it matches the name of a known directive, we
+ * can reference the string within the module if needed. Otherwise, we
+ * can still make a copy in the 'p' pool. */
+ cmd_name = ap_getword_conf(temp_pool, &args);
if (*cmd_name == '\0') {
/* Note: this branch should not occur. An empty line should have
* triggered the exit further above.
@@ -1136,10 +1140,11 @@ static const char *ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool,
newdir = apr_pcalloc(p, sizeof(ap_directive_t));
newdir->filename = parms->config_file->name;
newdir->line_num = parms->config_file->line_number;
- newdir->directive = cmd_name;
newdir->args = apr_pstrdup(p, args);
if ((cmd = ap_find_command_in_modules(cmd_name, &mod)) != NULL) {
+ newdir->directive = cmd->name;
+
if (cmd->req_override & EXEC_ON_READ) {
ap_directive_t *sub_tree = NULL;
@@ -1173,6 +1178,11 @@ static const char *ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool,
return retval;
}
}
+ else {
+ /* No known directive found? Make a copy of what we have parsed. */
+ newdir->directive = apr_pstrdup(p, cmd_name);
+ }
+
if (cmd_name[0] == '<') {
if (cmd_name[1] != '/') {