From 48fbb208d68480001f93aa08bd5565e49236f23b Mon Sep 17 00:00:00 2001 From: Davide Beatrici Date: Thu, 1 Sep 2022 09:35:51 +0200 Subject: [PATCH] osspd.c: Fix PulseAudio devices failing to open in ALSA slave "XDG_RUNTIME_DIR" points to the directory that contains PulseAudio's socket. --- osspd.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/osspd.c b/osspd.c index 43bde5e..01e564b 100644 --- a/osspd.c +++ b/osspd.c @@ -1126,6 +1126,12 @@ static void put_os(struct ossp_stream *os) static void set_extra_env(const pid_t pid) { + const char *target_vars[] = { + "DISPLAY=", // Display manager + "PULSE_", // PulseAudio + "XDG_RUNTIME_DIR=" // Audio servers + }; + char *line = NULL; FILE *file; size_t size; @@ -1138,24 +1144,17 @@ static void set_extra_env(const pid_t pid) if (!file) return; - /* - * Copy all PULSE variables and DISPLAY so that - * ssh -X remotehost 'mplayer -ao oss' will work. - */ while ((len = getdelim(&line, &size, '\0', file)) != -1) { - char *sign = NULL; + for (uint8_t i = 0; i < ARRAY_SIZE(target_vars); ++i) { + char *sign; - if (len <= 6) - continue; - - if (strncmp(line, "PULSE_", 6) == 0) - sign = strchr(line, '='); - else if (len >= 8 && strncmp(line, "DISPLAY=", 8) == 0) - sign = line + 7; + if (strncmp(line, target_vars[i], strlen(target_vars[i])) != 0) + continue; - if (sign) { - *sign = '\0'; - setenv(line, sign + 1, 1); + if ((sign = strchr(line, '='))) { + *sign = '\0'; + setenv(line, sign + 1, 1); + } } }