@@ -52,6 +52,8 @@ static char *mc_cache_str = NULL;
52
52
static char * mc_data_str = NULL ;
53
53
54
54
static const char * homedir = NULL ;
55
+ /* value of $MC_HOME */
56
+ static const char * mc_home = NULL ;
55
57
56
58
static gboolean config_dir_present = FALSE;
57
59
@@ -276,18 +278,56 @@ mc_config_init_config_paths (GError ** error)
276
278
if (xdg_vars_initialized )
277
279
return ;
278
280
281
+ /* init mc_home and homedir if not yet */
282
+ (void ) mc_config_get_home_dir ();
283
+
279
284
#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 );
283
290
284
- 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 );
287
294
288
- 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
+ }
291
331
292
332
mc_config_fix_migrated_rules ();
293
333
#else /* MC_HOMEDIR_XDG */
@@ -302,8 +342,7 @@ mc_config_init_config_paths (GError ** error)
302
342
dir = g_build_filename (mc_config_get_home_dir (), MC_USERCONF_DIR , (char * ) NULL );
303
343
}
304
344
305
- 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 );
307
346
308
347
g_free (dir );
309
348
#endif /* MC_HOMEDIR_XDG */
@@ -363,6 +402,8 @@ mc_config_get_home_dir (void)
363
402
homedir = g_getenv ("MC_HOME" );
364
403
if (homedir == NULL || * homedir == '\0' )
365
404
homedir = g_getenv ("HOME" );
405
+ else
406
+ mc_home = homedir ;
366
407
if (homedir == NULL || * homedir == '\0' )
367
408
homedir = g_get_home_dir ();
368
409
}
@@ -499,7 +540,7 @@ mc_config_get_full_vpath (const char *config_name)
499
540
500
541
str_path = mc_config_get_full_path (config_name );
501
542
502
- ret_vpath = vfs_path_from_str (str_path );
543
+ ret_vpath = vfs_path_from_str (str_path );
503
544
g_free (str_path );
504
545
return ret_vpath ;
505
546
}
0 commit comments