dougm 01/03/09 15:42:28 Added: src/modules/perl modperl_pcw.c modperl_pcw.h Log: module for walking the parsed Apache configuration Revision Changes Path 1.1 modperl-2.0/src/modules/perl/modperl_pcw.c Index: modperl_pcw.c =================================================================== #include "mod_perl.h" /* * pcw == Parsed Config Walker * generic functions for walking parsed config using callbacks */ void ap_pcw_walk_location_config(apr_pool_t *pconf, server_rec *s, core_server_config *sconf, module *modp, ap_pcw_dir_walker dw, void *data) { int i; ap_conf_vector_t **urls = (ap_conf_vector_t **)sconf->sec_url->elts; for (i = 0; i < sconf->sec_url->nelts; i++) { core_dir_config *conf = ap_get_module_config(urls[i], &core_module); void *dir_cfg = ap_get_module_config(urls[i], modp); if (!dw(pconf, s, dir_cfg, conf->d, data)) { break; } } } void ap_pcw_walk_directory_config(apr_pool_t *pconf, server_rec *s, core_server_config *sconf, module *modp, ap_pcw_dir_walker dw, void *data) { int i; ap_conf_vector_t **dirs = (ap_conf_vector_t **)sconf->sec->elts; for (i = 0; i < sconf->sec->nelts; i++) { core_dir_config *conf = ap_get_module_config(dirs[i], &core_module); void *dir_cfg = ap_get_module_config(dirs[i], modp); if (!dw(pconf, s, dir_cfg, conf->d, data)) { break; } } } void ap_pcw_walk_files_config(apr_pool_t *pconf, server_rec *s, core_dir_config *dconf, module *modp, ap_pcw_dir_walker dw, void *data) { int i; ap_conf_vector_t **dirs = (ap_conf_vector_t **)dconf->sec->elts; for (i = 0; i < dconf->sec->nelts; i++) { core_dir_config *conf = ap_get_module_config(dirs[i], &core_module); void *dir_cfg = ap_get_module_config(dirs[i], modp); if (!dw(pconf, s, dir_cfg, conf->d, data)) { break; } } } void ap_pcw_walk_default_config(apr_pool_t *pconf, server_rec *s, module *modp, ap_pcw_dir_walker dw, void *data) { core_dir_config *conf = ap_get_module_config(s->lookup_defaults, &core_module); void *dir_cfg = ap_get_module_config(s->lookup_defaults, modp); dw(pconf, s, dir_cfg, conf->d, data); } void ap_pcw_walk_server_config(apr_pool_t *pconf, server_rec *s, module *modp, ap_pcw_srv_walker sw, void *data) { void *cfg = ap_get_module_config(s->module_config, modp); if (!cfg) { return; } sw(pconf, s, cfg, data); } void ap_pcw_walk_config(apr_pool_t *pconf, server_rec *s, module *modp, void *data, ap_pcw_dir_walker dw, ap_pcw_srv_walker sw) { for (; s; s = s->next) { core_dir_config *dconf = ap_get_module_config(s->lookup_defaults, &core_module); core_server_config *sconf = ap_get_module_config(s->module_config, &core_module); if (dw) { ap_pcw_walk_location_config(pconf, s, sconf, modp, dw, data); ap_pcw_walk_directory_config(pconf, s, sconf, modp, dw, data); ap_pcw_walk_files_config(pconf, s, dconf, modp, dw, data); ap_pcw_walk_default_config(pconf, s, modp, dw, data); } if (sw) { ap_pcw_walk_server_config(pconf, s, modp, sw, data); } } } 1.1 modperl-2.0/src/modules/perl/modperl_pcw.h Index: modperl_pcw.h =================================================================== #ifndef MODPERL_PCW_H #define MODPERL_PCW_H typedef int (*ap_pcw_dir_walker) (apr_pool_t *, server_rec *, void *, char *, void *); typedef int (*ap_pcw_srv_walker) (apr_pool_t *, server_rec *, void *, void *); void ap_pcw_walk_location_config(apr_pool_t *pconf, server_rec *s, core_server_config *sconf, module *modp, ap_pcw_dir_walker dw, void *data); void ap_pcw_walk_directory_config(apr_pool_t *pconf, server_rec *s, core_server_config *sconf, module *modp, ap_pcw_dir_walker dw, void *data); void ap_pcw_walk_files_config(apr_pool_t *pconf, server_rec *s, core_dir_config *dconf, module *modp, ap_pcw_dir_walker dw, void *data); void ap_pcw_walk_default_config(apr_pool_t *pconf, server_rec *s, module *modp, ap_pcw_dir_walker dw, void *data); void ap_pcw_walk_server_config(apr_pool_t *pconf, server_rec *s, module *modp, ap_pcw_srv_walker sw, void *data); void ap_pcw_walk_config(apr_pool_t *pconf, server_rec *s, module *modp, void *data, ap_pcw_dir_walker dw, ap_pcw_srv_walker sw); #endif /* MODPERL_PCW_H */