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,6 +1748,11 @@ static int state_dir(struct sm_media_session *sess)
if (impl->state_dir_fd != -1)
return impl->state_dir_fd;
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");
@ -1762,7 +1767,8 @@ static int state_dir(struct sm_media_session *sess)
return -ENOTSUP;
}
snprintf(impl->state_dir, sizeof(impl->state_dir)-1,
"%s/.pipewire-media-session/", home_dir);
"%s/.config/pipewire-media-session/", home_dir);
}
if ((res = open(impl->state_dir, O_CLOEXEC | O_DIRECTORY | O_PATH)) < 0) {
if (errno == ENOENT) {