From a8b8a8268754b1a3042f9ef7ab171ed1eb44248d Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Thu, 29 Mar 2012 13:50:45 +0400 Subject: [PATCH] Ticket #1851: fixed support of XDG_* shell variables ...broken in 13a660d2e0cdb43ec46df38e53687a77f76581e6 Signed-off-by: Andrew Borodin --- lib/mcconfig/paths.c | 63 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/lib/mcconfig/paths.c b/lib/mcconfig/paths.c index 79c96123c..ca10a0e31 100644 --- a/lib/mcconfig/paths.c +++ b/lib/mcconfig/paths.c @@ -52,6 +52,8 @@ static char *mc_cache_str = NULL; static char *mc_data_str = NULL; static const char *homedir = NULL; +/* value of $MC_HOME */ +static const char *mc_home = NULL; static gboolean config_dir_present = FALSE; @@ -276,18 +278,56 @@ mc_config_init_config_paths (GError ** error) if (xdg_vars_initialized) return; + /* init mc_home and homedir if not yet */ + (void) mc_config_get_home_dir (); + #ifdef MC_HOMEDIR_XDG - dir = g_build_filename (mc_config_get_home_dir (), ".config", (char *) NULL); - mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); - g_free (dir); + if (mc_home != NULL) + { + dir = g_build_filename (mc_home, ".config", (char *) NULL); + mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); - dir = g_build_filename (mc_config_get_home_dir (), ".cache", (char *) NULL); - mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); - g_free (dir); + dir = g_build_filename (mc_home, ".cache", (char *) NULL); + mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); - dir = g_build_filename (mc_config_get_home_dir (), ".local", "share", (char *) NULL); - mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); - g_free (dir); + dir = g_build_filename (mc_home, ".local", "share", (char *) NULL); + mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); + } + else + { + dir = (char *) g_get_user_config_dir (); + if (dir != NULL && *dir != '\0') + mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + else + { + dir = g_build_filename (homedir, ".config", (char *) NULL); + mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); + } + + dir = (char *) g_get_user_cache_dir (); + if (dir != NULL && *dir != '\0') + mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + else + { + dir = g_build_filename (homedir, ".cache", (char *) NULL); + mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); + } + + dir = (char *) g_get_user_data_dir (); + if (dir != NULL && *dir != '\0') + mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + else + { + dir = g_build_filename (homedir, ".local", "share", (char *) NULL); + mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error); + g_free (dir); + } + } mc_config_fix_migrated_rules (); #else /* MC_HOMEDIR_XDG */ @@ -302,8 +342,7 @@ mc_config_init_config_paths (GError ** error) dir = g_build_filename (mc_config_get_home_dir (), MC_USERCONF_DIR, (char *) NULL); } - mc_data_str = mc_cache_str = mc_config_str = - mc_config_init_one_config_path (dir, "", error); + mc_data_str = mc_cache_str = mc_config_str = mc_config_init_one_config_path (dir, "", error); g_free (dir); #endif /* MC_HOMEDIR_XDG */ @@ -363,6 +402,8 @@ mc_config_get_home_dir (void) homedir = g_getenv ("MC_HOME"); if (homedir == NULL || *homedir == '\0') homedir = g_getenv ("HOME"); + else + mc_home = homedir; if (homedir == NULL || *homedir == '\0') homedir = g_get_home_dir (); } -- 2.11.4.GIT