summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/global.h1
-rw-r--r--options/path.c22
-rw-r--r--options/path.h3
-rw-r--r--player/main.c1
4 files changed, 20 insertions, 7 deletions
diff --git a/common/global.h b/common/global.h
index 879ca72386..8adc59e02c 100644
--- a/common/global.h
+++ b/common/global.h
@@ -8,6 +8,7 @@ struct mpv_global {
struct mp_log *log;
struct m_config_shadow *config;
struct mp_client_api *client_api;
+ char *configdir;
// Using this is deprecated and should be avoided (missing synchronization).
// Use m_config_cache to access mpv_global.config instead.
diff --git a/options/path.c b/options/path.c
index dac9238cf9..d2b74516e1 100644
--- a/options/path.c
+++ b/options/path.c
@@ -61,6 +61,19 @@ static const char *const config_dirs[] = {
"global",
};
+void mp_init_paths(struct mpv_global *global, struct MPOpts *opts)
+{
+ TA_FREEP(&global->configdir);
+
+ const char *force_configdir = getenv("MPV_HOME");
+ if (opts->force_configdir && opts->force_configdir[0])
+ force_configdir = opts->force_configdir;
+ if (!opts->load_config)
+ force_configdir = "";
+
+ global->configdir = talloc_strdup(global, force_configdir);
+}
+
// Return a platform specific path using a path type as defined in osdep/path.h.
// Keep in mind that the only way to free the return value is freeing talloc_ctx
// (or its children), as this function can return a statically allocated string.
@@ -70,15 +83,10 @@ static const char *mp_get_platform_path(void *talloc_ctx,
{
assert(talloc_ctx);
- const char *force_configdir = getenv("MPV_HOME");
- if (global->opts->force_configdir && global->opts->force_configdir[0])
- force_configdir = global->opts->force_configdir;
- if (!global->opts->load_config)
- force_configdir = "";
- if (force_configdir) {
+ if (global->configdir) {
for (int n = 0; n < MP_ARRAY_SIZE(config_dirs); n++) {
if (strcmp(config_dirs[n], type) == 0)
- return (n == 0 && force_configdir[0]) ? force_configdir : NULL;
+ return (n == 0 && global->configdir[0]) ? global->configdir : NULL;
}
}
diff --git a/options/path.h b/options/path.h
index 0d488fcb89..c3c3699a0b 100644
--- a/options/path.h
+++ b/options/path.h
@@ -24,6 +24,9 @@
#include "misc/bstr.h"
struct mpv_global;
+struct MPOpts;
+
+void mp_init_paths(struct mpv_global *global, struct MPOpts *opts);
// Search for the input filename in several paths. These include user and global
// config locations by default. Some platforms may implement additional platform
diff --git a/player/main.c b/player/main.c
index 5870574844..d94b61230e 100644
--- a/player/main.c
+++ b/player/main.c
@@ -338,6 +338,7 @@ int mp_initialize(struct MPContext *mpctx, char **options)
if (options)
m_config_preparse_command_line(mpctx->mconfig, mpctx->global, options);
+ mp_init_paths(mpctx->global, opts);
mp_update_logging(mpctx, true);
if (options) {