diff options
author | wm4 <wm4@nowhere> | 2014-06-26 18:06:31 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-06-26 19:41:48 +0200 |
commit | 236fcd36483101ad59c0de7fbd1c03913b19b647 (patch) | |
tree | 146d73825bdc1fd4c657f86b5c09e1389bd5c034 | |
parent | c63378d41cdb004bac8e400bef8f3e73c5123de7 (diff) | |
download | mpv-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.c | 20 |
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) |