You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2009/07/24 22:55:20 UTC
svn commit: r797648 - /httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c
Author: wrowe
Date: Fri Jul 24 20:55:20 2009
New Revision: 797648
URL: http://svn.apache.org/viewvc?rev=797648&view=rev
Log:
use our apr specific methods of merging this server config table and array
Modified:
httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c
Modified: httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c?rev=797648&r1=797647&r2=797648&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c (original)
+++ httpd/mod_fcgid/trunk/mod_fcgid/fcgid_conf.c Fri Jul 24 20:55:20 2009
@@ -19,6 +19,7 @@
#include "ap_mmn.h"
#include "apr_strings.h"
#include "apr_hash.h"
+#include "apr_lib.h"
#include "apr_tables.h"
#include "http_main.h"
#include "httpd.h"
@@ -90,44 +91,25 @@
void *merge_fcgid_server_config(apr_pool_t * p, void *basev, void *locv)
{
- int i;
fcgid_server_conf *merged_config =
(fcgid_server_conf *) apr_pcalloc(p, sizeof(fcgid_server_conf));
fcgid_server_conf *base = (fcgid_server_conf *) basev;
fcgid_server_conf *local = (fcgid_server_conf *) locv;
- const apr_array_header_t *baseenv_array, *locenv_array;
init_server_config(p, merged_config);
/* Merge environment variables */
- baseenv_array = apr_table_elts(base->default_init_env);
- locenv_array = apr_table_elts(local->default_init_env);
-
- if (baseenv_array != NULL || locenv_array != NULL) {
- merged_config->default_init_env = apr_table_make(p, 20);
-
- if (locenv_array != NULL) {
- const apr_table_entry_t *locenv_entry =
- (apr_table_entry_t *) locenv_array->elts;
-
- for (i = 0; i < locenv_array->nelts; ++i) {
- apr_table_set(merged_config->default_init_env,
- locenv_entry[i].key, locenv_entry[i].val);
- }
- }
-
- if (baseenv_array != NULL) {
- const apr_table_entry_t *baseenv_entry =
- (apr_table_entry_t *) baseenv_array->elts;
-
- for (i = 0; i < baseenv_array->nelts; ++i) {
- if (apr_table_get
- (merged_config->default_init_env,
- baseenv_entry[i].key))
- continue;
- apr_table_set(merged_config->default_init_env,
- baseenv_entry[i].key, baseenv_entry[i].val);
- }
+ if (local->default_init_env != NULL || base->default_init_env != NULL) {
+ if (local->default_init_env == NULL)
+ merged_config->default_init_env = base->default_init_env;
+ else if (base->default_init_env == NULL)
+ merged_config->default_init_env = local->default_init_env;
+ else {
+ merged_config->default_init_env =
+ apr_table_copy(p, base->default_init_env);
+ apr_table_overlap(merged_config->default_init_env,
+ local->default_init_env,
+ APR_OVERLAP_TABLES_SET);
}
}
@@ -137,14 +119,13 @@
merged_config->pass_headers = base->pass_headers;
else if (base->pass_headers == NULL)
merged_config->pass_headers = local->pass_headers;
- else {
- merged_config->pass_headers =
- apr_array_copy(p, base->pass_headers);
- apr_array_cat(merged_config->pass_headers,
- local->pass_headers);
- }
+ else
+ merged_config->pass_headers = apr_array_append(p,
+ base->pass_headers,
+ local->pass_headers);
}
- // Merge the other configurations
+
+ /* Merge the other configurations */
merged_config->ipc_comm_timeout = base->ipc_comm_timeout;
merged_config->ipc_comm_timeout = local->ipc_comm_timeout;
@@ -573,11 +554,17 @@
const char *add_default_env_vars(cmd_parms * cmd, void *dummy,
const char *name, const char *value)
{
+ char *pstr;
+
fcgid_server_conf *config =
ap_get_module_config(cmd->server->module_config, &fcgid_module);;
if (config->default_init_env == NULL)
config->default_init_env = apr_table_make(cmd->pool, 20);
-
+#if defined(WIN32) || defined(OS2) || defined(NETWARE)
+ /* Case insensitive environment platforms */
+ for (name = pstr = apr_pstrdup(cmd->pool, name); *pstr; ++pstr)
+ *pstr = apr_toupper(*pstr);
+#endif
apr_table_set(config->default_init_env, name, value ? value : "");
return NULL;
}