From 854d01934312f2f25909a905dc535885ed90ad2e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 16 Sep 2020 12:19:33 +0200 Subject: [PATCH] pipewire: improve get_prgname() --- src/pipewire/pipewire.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/pipewire/pipewire.c b/src/pipewire/pipewire.c index 5471a9485..080070316 100644 --- a/src/pipewire/pipewire.c +++ b/src/pipewire/pipewire.c @@ -473,15 +473,31 @@ const char *pw_get_application_name(void) SPA_EXPORT const char *pw_get_prgname(void) { - static char tcomm[16 + 1]; - spa_zero(tcomm); - -#ifndef __FreeBSD__ - if (prctl(PR_GET_NAME, (unsigned long) tcomm, 0, 0, 0) == 0) - return tcomm; + static char prgname[PATH_MAX]; + spa_memzero(prgname, sizeof(prgname)); +#if defined(__linux__) || defined(__FreeBSD_kernel__) + { + ssize_t len; + if ((len = readlink("/proc/self/exe", prgname, sizeof(prgname)-1)) > 0) + return strrchr(prgname, '/') + 1; + } #endif - - return NULL; +#if defined __FreeBSD__ + { + ssize_t len; + spa_memzero(prgname, sizeof(prgname)); + if ((len = readlink("/proc/curproc/file", prgname, sizeof(prgname)-1)) > 0) + return strrchr(prgname, '/') + 1; + } +#endif +#ifndef __FreeBSD__ + { + if (prctl(PR_GET_NAME, (unsigned long) prgname, 0, 0, 0) == 0) + return prgname; + } +#endif + snprintf(prgname, sizeof(prgname)-1, "pid-%d", getpid()); + return prgname; } /** Get the user name \memberof pw_pipewire */