mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-03 09:01:50 -05:00
core-util: Attempt to make runtime paths smaller to avoid 108 char limit.
When the runtime path gets long (which can happen on some NFS mounts where $HOME is not just /home/$USER), it can grow longer the 108 char limit imposed by sockaddr_un.sun_path. This just calls realpath which should ultimately point into /tmp in most cases and result in a much smaller path. Only do this when we are adding on a name component to the runtime path so creating the actual symlink will still get the original, long name, but this shouldn't be a problem as it never goes into the sockaddr_un.sun_path. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=44680
This commit is contained in:
parent
5e9e0d5086
commit
664985b7c2
1 changed files with 16 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue