examples: media-session: Conform to XDG base directory spec

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
This commit is contained in:
Sanchayan Maity 2020-09-08 15:35:52 +05:30 committed by Wim Taymans
parent d456893f31
commit f4a949dc3a

View file

@ -1748,21 +1748,27 @@ static int state_dir(struct sm_media_session *sess)
if (impl->state_dir_fd != -1) if (impl->state_dir_fd != -1)
return impl->state_dir_fd; return impl->state_dir_fd;
home_dir = getenv("HOME"); home_dir = getenv("XDG_CONFIG_HOME");
if (home_dir == NULL) if (home_dir != NULL)
home_dir = getenv("USERPROFILE"); snprintf(impl->state_dir, sizeof(impl->state_dir)-1,
if (home_dir == NULL) { "%s/pipewire-media-session/", home_dir);
struct passwd pwd, *result = NULL; else {
char buffer[4096]; home_dir = getenv("HOME");
if (getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &result) == 0) if (home_dir == NULL)
home_dir = result ? result->pw_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 (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);
if ((res = open(impl->state_dir, O_CLOEXEC | O_DIRECTORY | O_PATH)) < 0) { if ((res = open(impl->state_dir, O_CLOEXEC | O_DIRECTORY | O_PATH)) < 0) {
if (errno == ENOENT) { if (errno == ENOENT) {