summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-06-26 18:06:31 +0200
committerwm4 <wm4@nowhere>2014-06-26 19:41:48 +0200
commit236fcd36483101ad59c0de7fbd1c03913b19b647 (patch)
tree146d73825bdc1fd4c657f86b5c09e1389bd5c034
parentc63378d41cdb004bac8e400bef8f3e73c5123de7 (diff)
downloadmpv-236fcd36483101ad59c0de7fbd1c03913b19b647.tar.bz2
mpv-236fcd36483101ad59c0de7fbd1c03913b19b647.tar.xz
config: prefer the old config dir if it exists, but XDG doesn't
This means normally the XDG config dir will be used. But if the old config dir (~/.mpv) exists and the XDG config dir does not, then don't create it. To simplify the code, also make mp_path_exists() accept NULL paths. In that case it's considered as not existing. (Funnily, on Linux this already worked, because the string is passed directly to the kernel, and the kernel will just return EFAULT on invalid memory.)
-rw-r--r--options/path.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/options/path.c b/options/path.c
index decaba4c78..8fe44a2a2d 100644
--- a/options/path.c
+++ b/options/path.c
@@ -50,18 +50,26 @@
static void mp_add_xdg_config_dirs(void *talloc_ctx, struct mpv_global *global,
char **dirs, int i)
{
- const char *home = getenv("HOME");
- const char *tmp = NULL;
+ char *home = getenv("HOME");
+ char *tmp = NULL;
+ char *xdg_home = NULL;
tmp = getenv("XDG_CONFIG_HOME");
if (tmp && *tmp)
- dirs[i++] = talloc_asprintf(talloc_ctx, "%s/mpv", tmp);
+ xdg_home = talloc_asprintf(talloc_ctx, "%s/mpv", tmp);
else if (home && *home)
- dirs[i++] = talloc_asprintf(talloc_ctx, "%s/.config/mpv", home);
+ xdg_home = talloc_asprintf(talloc_ctx, "%s/.config/mpv", home);
// Maintain compatibility with old ~/.mpv
+ char *old_home = NULL;
if (home && *home)
- dirs[i++] = talloc_asprintf(talloc_ctx, "%s/.mpv", home);
+ old_home = talloc_asprintf(talloc_ctx, "%s/.mpv", home);
+
+ // If the old ~/.mpv exists, and the XDG config dir doesn't, use the old
+ // config dir only.
+ if (mp_path_exists(xdg_home) || !mp_path_exists(old_home))
+ dirs[i++] = xdg_home;
+ dirs[i++] = old_home;
#if HAVE_COCOA
dirs[i++] = mp_get_macosx_bundle_dir(talloc_ctx);
@@ -284,7 +292,7 @@ char *mp_getcwd(void *talloc_ctx)
bool mp_path_exists(const char *path)
{
struct stat st;
- return mp_stat(path, &st) == 0;
+ return path && mp_stat(path, &st) == 0;
}
bool mp_path_isdir(const char *path)