mirror of https://github.com/MidnightCommander/mc
Some functions moved from src/setup.c to lib/mcconfig
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
6ed4e6de9d
commit
fa9fa18697
|
@ -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 ****************************************************************************/
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
|
143
src/setup.c
143
src/setup.c
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue