From 49543e24cc96e54f189d709dcdadf699f04d2edf Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Wed, 16 Aug 2017 16:50:29 +0000 Subject: [PATCH] Merge r1713043, r1802305, r1802309 from trunk: Save a few bytes in conf pool when processing 'Define'. + some minor style issues + split long lines Be explicit and safe (const) with the strings stored in ap_server_config_defines. Follow up to r1713043. ap_server_config_defines and ap_server_{pre,post}_read_config are arrays of *const* strings (must not change after being inserted), make it explicit. Submitted by: jailletc36, ylavic, ylavic Reviewed by: ylavic, jorton, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1805223 13f79535-47bb-0310-9956-ffa450edef68 --- STATUS | 8 -------- server/config.c | 4 ++-- server/core.c | 24 ++++++++++++++---------- server/main.c | 25 ++++++++++++++----------- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/STATUS b/STATUS index 4bc28539d8..db09002c94 100644 --- a/STATUS +++ b/STATUS @@ -116,14 +116,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) core: ap_server_config_defines and ap_server_{pre,post}_read_config - constantness and bytes saving, no functional change. - trunk patch: http://svn.apache.org/r1713043 - http://svn.apache.org/r1802305 - http://svn.apache.org/r1802309 - 2.4.x patch: http://home.apache.org/~ylavic/patches/httpd-2.4.x-globals_constantness_and_bytes_saving.patch - +1: ylavic, jorton, jim - PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/server/config.c b/server/config.c index 61daeaf4a9..983c7dfae3 100644 --- a/server/config.c +++ b/server/config.c @@ -1715,14 +1715,14 @@ typedef struct { static apr_status_t arr_elts_getstr(void *buf, apr_size_t bufsiz, void *param) { arr_elts_param_t *arr_param = (arr_elts_param_t *)param; - char *elt; + const char *elt; /* End of array reached? */ if (++arr_param->curr_idx > arr_param->array->nelts) return APR_EOF; /* return the line */ - elt = ((char **)arr_param->array->elts)[arr_param->curr_idx - 1]; + elt = ((const char **)arr_param->array->elts)[arr_param->curr_idx - 1]; if (apr_cpystrn(buf, elt, bufsiz) - (char *)buf >= bufsiz - 1) return APR_ENOSPC; return APR_SUCCESS; diff --git a/server/core.c b/server/core.c index 20fa583bdb..de2400d92a 100644 --- a/server/core.c +++ b/server/core.c @@ -1435,18 +1435,20 @@ static const char *set_define(cmd_parms *cmd, void *dummy, const char *err = ap_check_cmd_context(cmd, NOT_IN_HTACCESS); if (err) return err; - if (ap_strchr_c(name, ':') != NULL) + if (ap_strchr_c(name, ':') != NULL) { return "Variable name must not contain ':'"; + } - if (!saved_server_config_defines) + if (!saved_server_config_defines) { init_config_defines(cmd->pool); + } if (!ap_exists_config_define(name)) { - char **newv = (char **)apr_array_push(ap_server_config_defines); - *newv = apr_pstrdup(cmd->pool, name); + *(const char **)apr_array_push(ap_server_config_defines) = name; } if (value) { - if (!server_config_defined_vars) + if (!server_config_defined_vars) { server_config_defined_vars = apr_table_make(cmd->pool, 5); + } apr_table_setn(server_config_defined_vars, name, value); } @@ -1457,20 +1459,22 @@ static const char *unset_define(cmd_parms *cmd, void *dummy, const char *name) { int i; - char **defines; + const char **defines; const char *err = ap_check_cmd_context(cmd, NOT_IN_HTACCESS); if (err) return err; - if (ap_strchr_c(name, ':') != NULL) + if (ap_strchr_c(name, ':') != NULL) { return "Variable name must not contain ':'"; + } - if (!saved_server_config_defines) + if (!saved_server_config_defines) { init_config_defines(cmd->pool); + } - defines = (char **)ap_server_config_defines->elts; + defines = (const char **)ap_server_config_defines->elts; for (i = 0; i < ap_server_config_defines->nelts; i++) { if (strcmp(defines[i], name) == 0) { - defines[i] = *(char **)apr_array_pop(ap_server_config_defines); + defines[i] = *(const char **)apr_array_pop(ap_server_config_defines); break; } } diff --git a/server/main.c b/server/main.c index ba9d91c6d0..ec0ea68d9b 100644 --- a/server/main.c +++ b/server/main.c @@ -477,9 +477,12 @@ int main(int argc, const char * const argv[]) apr_pool_create(&pcommands, ap_pglobal); apr_pool_tag(pcommands, "pcommands"); - ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *)); - ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *)); - ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *)); + ap_server_pre_read_config = apr_array_make(pcommands, 1, + sizeof(const char *)); + ap_server_post_read_config = apr_array_make(pcommands, 1, + sizeof(const char *)); + ap_server_config_defines = apr_array_make(pcommands, 1, + sizeof(const char *)); error = ap_setup_prelinked_modules(process); if (error) { @@ -497,16 +500,16 @@ int main(int argc, const char * const argv[]) while ((rv = apr_getopt(opt, AP_SERVER_BASEARGS, &c, &opt_arg)) == APR_SUCCESS) { - char **new; + const char **new; switch (c) { case 'c': - new = (char **)apr_array_push(ap_server_post_read_config); + new = (const char **)apr_array_push(ap_server_post_read_config); *new = apr_pstrdup(pcommands, opt_arg); break; case 'C': - new = (char **)apr_array_push(ap_server_pre_read_config); + new = (const char **)apr_array_push(ap_server_pre_read_config); *new = apr_pstrdup(pcommands, opt_arg); break; @@ -515,7 +518,7 @@ int main(int argc, const char * const argv[]) break; case 'D': - new = (char **)apr_array_push(ap_server_config_defines); + new = (const char **)apr_array_push(ap_server_config_defines); *new = apr_pstrdup(pcommands, opt_arg); /* Setting -D DUMP_VHOSTS should work like setting -S */ if (strcmp(opt_arg, "DUMP_VHOSTS") == 0) @@ -541,7 +544,7 @@ int main(int argc, const char * const argv[]) break; case 'X': - new = (char **)apr_array_push(ap_server_config_defines); + new = (const char **)apr_array_push(ap_server_config_defines); *new = "DEBUG"; break; @@ -574,15 +577,15 @@ int main(int argc, const char * const argv[]) case 'S': ap_run_mode = AP_SQ_RM_CONFIG_DUMP; - new = (char **)apr_array_push(ap_server_config_defines); + new = (const char **)apr_array_push(ap_server_config_defines); *new = "DUMP_VHOSTS"; - new = (char **)apr_array_push(ap_server_config_defines); + new = (const char **)apr_array_push(ap_server_config_defines); *new = "DUMP_RUN_CFG"; break; case 'M': ap_run_mode = AP_SQ_RM_CONFIG_DUMP; - new = (char **)apr_array_push(ap_server_config_defines); + new = (const char **)apr_array_push(ap_server_config_defines); *new = "DUMP_MODULES"; break; -- 2.40.0