diff options
-rw-r--r-- | src/pulsecore/core-util.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 1aa5a9a6..61f980e7 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -1980,7 +1980,7 @@ static char *get_path(const char *fn, pa_bool_t prependmid, pa_bool_t rt) { rtp = rt ? pa_get_runtime_dir() : pa_get_state_dir(); if (fn) { - char *r; + char *r, *canonical_rtp; if (pa_is_path_absolute(fn)) { pa_xfree(rtp); @@ -1990,20 +1990,31 @@ static char *get_path(const char *fn, pa_bool_t prependmid, pa_bool_t rt) { if (!rtp) return NULL; + /* Hopefully make the path smaller to avoid 108 char limit (fdo#44680) */ + if ((canonical_rtp = pa_realpath(rtp))) { + if (strlen(rtp) >= strlen(canonical_rtp)) + pa_xfree(rtp); + else { + pa_xfree(canonical_rtp); + canonical_rtp = rtp; + } + } else + canonical_rtp = rtp; + if (prependmid) { char *mid; if (!(mid = pa_machine_id())) { - pa_xfree(rtp); + pa_xfree(canonical_rtp); return NULL; } - r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s-%s", rtp, mid, fn); + r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s-%s", canonical_rtp, mid, fn); pa_xfree(mid); } else - r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s", rtp, fn); + r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s", canonical_rtp, fn); - pa_xfree(rtp); + pa_xfree(canonical_rtp); return r; } else return rtp; |