Merge branch '1851_xdg_fix' · MidnightCommander/mc@ce401d7
@@ -52,6 +52,8 @@ static char *mc_cache_str = NULL;
5252static char *mc_data_str = NULL;
53535454static const char *homedir = NULL;
55+/* value of $MC_HOME */
56+static const char *mc_home = NULL;
55575658static gboolean config_dir_present = FALSE;
5759@@ -276,18 +278,56 @@ mc_config_init_config_paths (GError ** error)
276278if (xdg_vars_initialized)
277279return;
278280281+/* init mc_home and homedir if not yet */
282+ (void) mc_config_get_home_dir ();
283+279284#ifdef MC_HOMEDIR_XDG
280-dir = g_build_filename (mc_config_get_home_dir (), ".config", (char *) NULL);
281-mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
282-g_free (dir);
285+if (mc_home != NULL)
286+ {
287+dir = g_build_filename (mc_home, ".config", (char *) NULL);
288+mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
289+g_free (dir);
283290284-dir = g_build_filename (mc_config_get_home_dir (), ".cache", (char *) NULL);
285-mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
286-g_free (dir);
291+ dir = g_build_filename (mc_home, ".cache", (char *) NULL);
292+ mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
293+ g_free (dir);
287294288-dir = g_build_filename (mc_config_get_home_dir (), ".local", "share", (char *) NULL);
289-mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
290-g_free (dir);
295+dir = g_build_filename (mc_home, ".local", "share", (char *) NULL);
296+mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
297+g_free (dir);
298+ }
299+else
300+ {
301+dir = (char *) g_get_user_config_dir ();
302+if (dir != NULL && *dir != '\0')
303+mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
304+else
305+ {
306+dir = g_build_filename (homedir, ".config", (char *) NULL);
307+mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
308+g_free (dir);
309+ }
310+311+dir = (char *) g_get_user_cache_dir ();
312+if (dir != NULL && *dir != '\0')
313+mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
314+else
315+ {
316+dir = g_build_filename (homedir, ".cache", (char *) NULL);
317+mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
318+g_free (dir);
319+ }
320+321+dir = (char *) g_get_user_data_dir ();
322+if (dir != NULL && *dir != '\0')
323+mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
324+else
325+ {
326+dir = g_build_filename (homedir, ".local", "share", (char *) NULL);
327+mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, error);
328+g_free (dir);
329+ }
330+ }
291331292332mc_config_fix_migrated_rules ();
293333#else /* MC_HOMEDIR_XDG */
@@ -302,8 +342,7 @@ mc_config_init_config_paths (GError ** error)
302342dir = g_build_filename (mc_config_get_home_dir (), MC_USERCONF_DIR, (char *) NULL);
303343 }
304344305-mc_data_str = mc_cache_str = mc_config_str =
306-mc_config_init_one_config_path (dir, "", error);
345+mc_data_str = mc_cache_str = mc_config_str = mc_config_init_one_config_path (dir, "", error);
307346308347g_free (dir);
309348#endif /* MC_HOMEDIR_XDG */
@@ -363,6 +402,8 @@ mc_config_get_home_dir (void)
363402homedir = g_getenv ("MC_HOME");
364403if (homedir == NULL || *homedir == '\0')
365404homedir = g_getenv ("HOME");
405+else
406+mc_home = homedir;
366407if (homedir == NULL || *homedir == '\0')
367408homedir = g_get_home_dir ();
368409 }
@@ -499,7 +540,7 @@ mc_config_get_full_vpath (const char *config_name)
499540500541str_path = mc_config_get_full_path (config_name);
501542502-ret_vpath = vfs_path_from_str(str_path);
543+ret_vpath = vfs_path_from_str (str_path);
503544g_free (str_path);
504545return ret_vpath;
505546}