Merge branch '1851_xdg_fix' · MidnightCommander/mc@ce401d7

@@ -52,6 +52,8 @@ static char *mc_cache_str = NULL;

5252

static char *mc_data_str = NULL;

53535454

static const char *homedir = NULL;

55+

/* value of $MC_HOME */

56+

static const char *mc_home = NULL;

55575658

static gboolean config_dir_present = FALSE;

5759

@@ -276,18 +278,56 @@ mc_config_init_config_paths (GError ** error)

276278

if (xdg_vars_initialized)

277279

return;

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+

}

291331292332

mc_config_fix_migrated_rules ();

293333

#else /* MC_HOMEDIR_XDG */

@@ -302,8 +342,7 @@ mc_config_init_config_paths (GError ** error)

302342

dir = 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);

307346308347

g_free (dir);

309348

#endif /* MC_HOMEDIR_XDG */

@@ -363,6 +402,8 @@ mc_config_get_home_dir (void)

363402

homedir = g_getenv ("MC_HOME");

364403

if (homedir == NULL || *homedir == '\0')

365404

homedir = g_getenv ("HOME");

405+

else

406+

mc_home = homedir;

366407

if (homedir == NULL || *homedir == '\0')

367408

homedir = g_get_home_dir ();

368409

}

@@ -499,7 +540,7 @@ mc_config_get_full_vpath (const char *config_name)

499540500541

str_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);

503544

g_free (str_path);

504545

return ret_vpath;

505546

}