diff options
author | Sanchayan Maity <sanchayan@asymptotic.io> | 2020-09-08 15:35:52 +0530 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2020-09-09 17:51:30 +0200 |
commit | f4a949dc3a833513a94c552c7d9dae57506a95fc (patch) | |
tree | cc8c984d008e2b8551594670a383d7721746c525 | |
parent | d456893f31610de9eb8943f732dee4a687c331d7 (diff) |
Currently pipewire-media-session uses ~/.pipewire-media-session for
storing configuration. Use home directory as specified by XDG base
directory specification viz. XDG_CONFIG_HOME and fall back to using
a default of $HOME/.config as per the spec if XDG_CONFIG_HOME is not
set or empty. Also in addition, all cases are now handled the same
and always end up using "%s/.config/pipewire-media-session".
If neither XDG_CONFIG_HOME or HOME are set, fall back to the earlier
approach.
Fixes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/271
Signed-off-by: Sanchayan Maity <sanchayan@asymptotic.io>
Fixes !298
-rw-r--r-- | src/examples/media-session/media-session.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index 1b8bd430..c25fcd0a 100644 --- a/src/examples/media-session/media-session.c +++ b/src/examples/media-session/media-session.c @@ -1748,21 +1748,27 @@ static int state_dir(struct sm_media_session *sess) if (impl->state_dir_fd != -1) return impl->state_dir_fd; - home_dir = getenv("HOME"); - if (home_dir == NULL) - home_dir = getenv("USERPROFILE"); - if (home_dir == NULL) { - struct passwd pwd, *result = NULL; - char buffer[4096]; - if (getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &result) == 0) - home_dir = result ? result->pw_dir : NULL; - } - if (home_dir == NULL) { - pw_log_error("Can't determine home directory"); - return -ENOTSUP; - } - snprintf(impl->state_dir, sizeof(impl->state_dir)-1, - "%s/.pipewire-media-session/", home_dir); + home_dir = getenv("XDG_CONFIG_HOME"); + if (home_dir != NULL) + snprintf(impl->state_dir, sizeof(impl->state_dir)-1, + "%s/pipewire-media-session/", home_dir); + else { + home_dir = getenv("HOME"); + if (home_dir == NULL) + home_dir = getenv("USERPROFILE"); + if (home_dir == NULL) { + struct passwd pwd, *result = NULL; + char buffer[4096]; + if (getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &result) == 0) + home_dir = result ? result->pw_dir : NULL; + } + if (home_dir == NULL) { + pw_log_error("Can't determine home directory"); + return -ENOTSUP; + } + snprintf(impl->state_dir, sizeof(impl->state_dir)-1, + "%s/.config/pipewire-media-session/", home_dir); + } if ((res = open(impl->state_dir, O_CLOEXEC | O_DIRECTORY | O_PATH)) < 0) { if (errno == ENOENT) { |