Some functions moved from src/setup.c to lib/mcconfig

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Slava Zanko 2011-01-26 23:46:41 +02:00
parent 6ed4e6de9d
commit fa9fa18697
3 changed files with 85 additions and 141 deletions

View File

@ -109,10 +109,15 @@ const char *mc_config_get_path (void);
const char *mc_config_get_home_dir (void);
char *mc_config_search_sysconffile(const char* sub_path, const char *conf_name);
char *mc_config_search_sysconffile (const char *sub_path, const char *conf_name);
char *mc_config_search_conffile(const char *base_path, const char* sub_path, const char *conf_name);
char *mc_config_search_conffile (const char *base_path, const char *sub_path,
const char *conf_name);
void mc_config_load_all_from_paths (const char *base_path, const char *sub_path,
mc_config_t ** config, const char *conf_name);
void mc_config_init_or_append_data (mc_config_t ** config, const char *fname);
/*** inline functions ****************************************************************************/

View File

@ -37,8 +37,8 @@
/*** global variables ****************************************************************************/
/* mc_sysconfig_dir: Area for default settings from maintainers of distributuves
default is /etc/mc or may be defined by MC_DATADIR
*/
default is /etc/mc or may be defined by MC_DATADIR
*/
char *mc_sysconfig_dir = NULL;
/* mc_share_data_dir: Area for default settings from developers */
@ -211,8 +211,8 @@ mc_config_copy (const char *old_name, const char *new_name, GError ** error)
/* --------------------------------------------------------------------------------------------- */
static char*
mc_config_get_conffile(const char *base_path, const char* sub_path, const char *conf_name)
static char *
mc_config_get_conffile (const char *base_path, const char *sub_path, const char *conf_name)
{
char *filename;
@ -223,7 +223,7 @@ mc_config_get_conffile(const char *base_path, const char* sub_path, const char *
if (g_file_test (filename, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
return filename;
g_free(filename);
g_free (filename);
return NULL;
}
@ -413,15 +413,15 @@ mc_config_deprecated_dir_present (void)
/* --------------------------------------------------------------------------------------------- */
char *
mc_config_search_sysconffile(const char* sub_path, const char *conf_name)
mc_config_search_sysconffile (const char *sub_path, const char *conf_name)
{
char *filename;
filename = mc_config_get_conffile(mc_sysconfig_dir, sub_path, conf_name);
filename = mc_config_get_conffile (mc_sysconfig_dir, sub_path, conf_name);
if (filename != NULL)
return filename;
filename = mc_config_get_conffile(mc_share_data_dir, sub_path, conf_name);
filename = mc_config_get_conffile (mc_share_data_dir, sub_path, conf_name);
if (filename != NULL)
return filename;
@ -431,16 +431,68 @@ mc_config_search_sysconffile(const char* sub_path, const char *conf_name)
/* --------------------------------------------------------------------------------------------- */
char *
mc_config_search_conffile(const char *base_path, const char* sub_path, const char *conf_name)
mc_config_search_conffile (const char *base_path, const char *sub_path, const char *conf_name)
{
char *filename;
filename = mc_config_get_conffile(base_path, sub_path, conf_name);
if (conf_name == NULL)
return NULL;
if (g_path_is_absolute (conf_name))
return g_strdup (conf_name);
filename = mc_config_get_conffile (base_path, sub_path, conf_name);
if (filename != NULL)
return filename;
return mc_config_search_sysconffile(sub_path, conf_name);
return mc_config_search_sysconffile (sub_path, conf_name);
}
/* --------------------------------------------------------------------------------------------- */
void
mc_config_load_all_from_paths (const char *base_path, const char *sub_path, mc_config_t ** config,
const char *conf_name)
{
char *filename;
/* 1) /usr/share/mc (mc_share_data_dir) */
filename = mc_config_get_conffile (mc_share_data_dir, sub_path, conf_name);
mc_config_init_or_append_data (config, filename);
g_free (filename);
/* 2) /etc/mc (mc_sysconfig_dir) */
filename = mc_config_get_conffile (mc_sysconfig_dir, sub_path, conf_name);
mc_config_init_or_append_data (config, filename);
g_free (filename);
/* 3) base_path */
if (g_path_is_absolute (conf_name))
filename = g_strdup (conf_name);
else
filename = mc_config_get_conffile (base_path, sub_path, conf_name);
mc_config_init_or_append_data (config, filename);
g_free (filename);
}
/* --------------------------------------------------------------------------------------------- */
/**
Create new mc_config object from specified ini-file or
append data to existing mc_config object from ini-file
*/
void
mc_config_init_or_append_data (mc_config_t ** config, const char *fname)
{
if (fname != NULL && g_file_test (fname, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
{
if (*config != NULL)
mc_config_read_file (*config, fname);
else
*config = mc_config_init (fname);
}
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -372,80 +372,6 @@ static const struct
/*** file scope functions ************************************************************************/
/* --------------------------------------------------------------------------------------------- */
/**
Get name of config file.
\param subdir
if not NULL, then config also search into specified subdir.
\param config_file_name
If specified filename is relative, then will search in standart patches.
\return
Newly allocated path to config name or NULL if file not found.
If config_file_name is a relative path, then search config in stantart paths.
*/
static char *
load_setup_get_full_config_name (const char *subdir, const char *config_file_name)
{
/*
TODO: IMHO, in future this function must be placed into mc_config module.
*/
char *lc_basename, *ret;
if (config_file_name == NULL)
return NULL;
if (g_path_is_absolute (config_file_name))
return g_strdup (config_file_name);
lc_basename = g_path_get_basename (config_file_name);
if (lc_basename == NULL)
return NULL;
if (subdir != NULL)
ret = g_build_filename (mc_config_get_path (), subdir, lc_basename, NULL);
else
ret = g_build_filename (mc_config_get_path (), lc_basename, NULL);
if (exist_file (ret))
{
g_free (lc_basename);
return ret;
}
g_free (ret);
if (subdir != NULL)
ret = g_build_filename (mc_sysconfig_dir, subdir, lc_basename, NULL);
else
ret = g_build_filename (mc_sysconfig_dir, lc_basename, NULL);
if (exist_file (ret))
{
g_free (lc_basename);
return ret;
}
g_free (ret);
if (subdir != NULL)
ret = g_build_filename (mc_share_data_dir, subdir, lc_basename, NULL);
else
ret = g_build_filename (mc_share_data_dir, lc_basename, NULL);
g_free (lc_basename);
if (exist_file (ret))
return ret;
g_free (ret);
return NULL;
}
/* --------------------------------------------------------------------------------------------- */
static const char *
setup__is_cfg_group_must_panel_config (const char *grp)
{
@ -513,28 +439,6 @@ setup__move_panels_config_into_separate_file (const char *profile)
mc_config_deinit (tmp_cfg);
}
/* --------------------------------------------------------------------------------------------- */
/**
Create new mc_config object from specified ini-file or
append data to existing mc_config object from ini-file
*/
static void
load_setup_init_config_from_file (mc_config_t ** config, const char *fname)
{
/*
TODO: IMHO, in future this function must be placed into mc_config module.
*/
if (exist_file (fname))
{
if (*config != NULL)
mc_config_read_file (*config, fname);
else
*config = mc_config_init (fname);
}
}
/* --------------------------------------------------------------------------------------------- */
static void
@ -667,52 +571,35 @@ load_keymap_from_section (const char *section_name, GArray * keymap, mc_config_t
static mc_config_t *
load_setup_get_keymap_profile_config (void)
{
/*
TODO: IMHO, in future this function must be placed into mc_config module.
*/
mc_config_t *keymap_config = NULL;
char *fname, *fname2;
/* 1) /usr/share/mc (mc_share_data_dir) */
fname = g_build_filename (mc_share_data_dir, GLOBAL_KEYMAP_FILE, NULL);
load_setup_init_config_from_file (&keymap_config, fname);
g_free (fname);
/* 2) /etc/mc (mc_sysconfig_dir) */
fname = g_build_filename (mc_sysconfig_dir, GLOBAL_KEYMAP_FILE, NULL);
load_setup_init_config_from_file (&keymap_config, fname);
g_free (fname);
/* 3) ${XDG_CONFIG_HOME}/mc */
fname = g_build_filename (mc_config_get_path (), GLOBAL_KEYMAP_FILE, NULL);
load_setup_init_config_from_file (&keymap_config, fname);
g_free (fname);
/* 4) main config; [Midnight Commander] -> keymap */
mc_config_load_all_from_paths (mc_config_get_path (), NULL, &keymap_config, GLOBAL_KEYMAP_FILE);
/* main config; [Midnight Commander] -> keymap */
fname2 =
mc_config_get_string (mc_main_config, CONFIG_APP_SECTION, "keymap", GLOBAL_KEYMAP_FILE);
fname = load_setup_get_full_config_name (NULL, fname2);
if (fname != NULL)
{
load_setup_init_config_from_file (&keymap_config, fname);
g_free (fname);
}
fname = mc_config_search_conffile (mc_config_get_path (), NULL, fname2);
g_free (fname2);
/* 5) getenv("MC_KEYMAP") */
fname = load_setup_get_full_config_name (NULL, g_getenv ("MC_KEYMAP"));
if (fname != NULL)
{
load_setup_init_config_from_file (&keymap_config, fname);
mc_config_init_or_append_data (&keymap_config, fname);
g_free (fname);
}
/* 6) --keymap=<keymap> */
fname = load_setup_get_full_config_name (NULL, mc_args__keymap_file);
/* getenv("MC_KEYMAP") */
fname = mc_config_search_conffile (mc_config_get_path (), NULL, g_getenv ("MC_KEYMAP"));
if (fname != NULL)
{
load_setup_init_config_from_file (&keymap_config, fname);
mc_config_init_or_append_data (&keymap_config, fname);
g_free (fname);
}
/* --keymap=<keymap> */
fname = mc_config_search_conffile (mc_config_get_path (), NULL, mc_args__keymap_file);
if (fname != NULL)
{
mc_config_init_or_append_data (&keymap_config, fname);
g_free (fname);
}