From f4a949dc3a833513a94c552c7d9dae57506a95fc Mon Sep 17 00:00:00 2001 From: Sanchayan Maity Date: Tue, 8 Sep 2020 15:35:52 +0530 Subject: [PATCH] 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 Fixes !298 --- src/examples/media-session/media-session.c | 34 +++++++++++++--------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index 1b8bd4300..c25fcd0a4 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; + 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 (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 (errno == ENOENT) {