summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanchayan Maity <sanchayan@asymptotic.io>2020-09-08 15:35:52 +0530
committerWim Taymans <wtaymans@redhat.com>2020-09-09 17:51:30 +0200
commitf4a949dc3a833513a94c552c7d9dae57506a95fc (patch)
treecc8c984d008e2b8551594670a383d7721746c525
parentd456893f31610de9eb8943f732dee4a687c331d7 (diff)
examples: media-session: Conform to XDG base directory specHEADmaster
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.c36
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) {