Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_subr/config.c view on Meta::CPAN
svn_boolean_t red_config = FALSE; /* "red" is the past tense of "read" */
/*** Read system-wide configurations first... ***/
#ifdef WIN32
if (sys_registry_path)
{
SVN_ERR(svn_config_read2(cfgp, sys_registry_path, FALSE, FALSE, pool));
red_config = TRUE;
}
#endif /* WIN32 */
if (sys_file_path)
{
if (red_config)
SVN_ERR(svn_config_merge(*cfgp, sys_file_path, FALSE));
else
{
SVN_ERR(svn_config_read3(cfgp, sys_file_path,
FALSE, FALSE, FALSE, pool));
red_config = TRUE;
}
}
/*** ...followed by per-user configurations. ***/
#ifdef WIN32
if (usr_registry_path)
{
if (red_config)
SVN_ERR(svn_config_merge(*cfgp, usr_registry_path, FALSE));
else
{
SVN_ERR(svn_config_read2(cfgp, usr_registry_path,
FALSE, FALSE, pool));
red_config = TRUE;
}
}
#endif /* WIN32 */
if (usr_file_path)
{
if (red_config)
SVN_ERR(svn_config_merge(*cfgp, usr_file_path, FALSE));
else
{
SVN_ERR(svn_config_read3(cfgp, usr_file_path,
FALSE, FALSE, FALSE, pool));
red_config = TRUE;
}
}
if (! red_config)
SVN_ERR(svn_config_create2(cfgp, FALSE, FALSE, pool));
return SVN_NO_ERROR;
}
/* CONFIG_DIR provides an override for the default behavior of reading
the default set of overlay files described by read_all()'s doc
string. */
static svn_error_t *
get_category_config(svn_config_t **cfg,
const char *config_dir,
const char *category,
apr_pool_t *pool)
{
const char *usr_reg_path = NULL, *sys_reg_path = NULL;
const char *usr_cfg_path, *sys_cfg_path;
svn_error_t *err = NULL;
*cfg = NULL;
if (! config_dir)
{
#ifdef WIN32
sys_reg_path = apr_pstrcat(pool, SVN_REGISTRY_SYS_CONFIG_PATH,
category, NULL);
usr_reg_path = apr_pstrcat(pool, SVN_REGISTRY_USR_CONFIG_PATH,
category, NULL);
#endif /* WIN32 */
err = svn_config__sys_config_path(&sys_cfg_path, category, pool);
if ((err) && (err->apr_err == SVN_ERR_BAD_FILENAME))
{
sys_cfg_path = NULL;
svn_error_clear(err);
}
else if (err)
return err;
}
else
sys_cfg_path = NULL;
SVN_ERR(svn_config_get_user_config_path(&usr_cfg_path, config_dir, category,
pool));
return read_all(cfg, sys_reg_path, usr_reg_path,
sys_cfg_path, usr_cfg_path, pool);
}
svn_error_t *
svn_config_get_config(apr_hash_t **cfg_hash,
const char *config_dir,
apr_pool_t *pool)
{
svn_config_t *cfg;
*cfg_hash = apr_hash_make(pool);
#define CATLEN (sizeof(SVN_CONFIG_CATEGORY_SERVERS) - 1)
SVN_ERR(get_category_config(&cfg, config_dir, SVN_CONFIG_CATEGORY_SERVERS,
pool));
if (cfg)
apr_hash_set(*cfg_hash, SVN_CONFIG_CATEGORY_SERVERS, CATLEN, cfg);
#undef CATLEN
#define CATLEN (sizeof(SVN_CONFIG_CATEGORY_CONFIG) - 1)
SVN_ERR(get_category_config(&cfg, config_dir, SVN_CONFIG_CATEGORY_CONFIG,
pool));
if (cfg)
( run in 1.037 second using v1.01-cache-2.11-cpan-22024b96cdf )