[pulseaudio-discuss] [PATCH] util: Try finding out application name using dladdr if available
David Henningsson
david.henningsson at canonical.com
Thu Oct 16 07:02:16 PDT 2014
On 2014-10-11 06:34, Felipe Sateler wrote:
> This fixes getting the binary name in the Hurd, or any other port using
> the GNU C library, but only in the case where the library is directly
> linked to. Opening with dlopen will not work.
I think the patch looks good and I've committed it now. Thanks!
>
> Change in v3: reorder header includes and definitions
> Change in v2: use a weak reference to main, so that we
> don't crash when main cannot be found.
> ---
> configure.ac | 2 ++
> src/pulse/util.c | 23 +++++++++++++++++++++++
> 2 files changed, 25 insertions(+)
>
> diff --git a/configure.ac b/configure.ac
> index f13ddb0..74bea71 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -580,6 +580,8 @@ AC_SYS_LARGEFILE
> # Check for open64 to know if the current system does have open64() and similar functions
> AC_CHECK_FUNCS_ONCE([open64])
>
> +AC_SEARCH_LIBS([dladdr], [dl], [HAVE_DLADDR=1], [HAVE_DLADDR=0])
> +AC_DEFINE(HAVE_DLADDR, [1], [Have dladdr?])
>
> ###################################
> # External libraries #
> diff --git a/src/pulse/util.c b/src/pulse/util.c
> index ace698c..d672f53 100644
> --- a/src/pulse/util.c
> +++ b/src/pulse/util.c
> @@ -64,6 +64,15 @@
>
> #include "util.h"
>
> +#if defined(HAVE_DLADDR) && defined(PA_GCC_WEAKREF)
> +#ifndef _GNU_SOURCE
> +#define _GNU_SOURCE 1
> +#endif
> +#include <dlfcn.h>
> +
> +static int _main() PA_GCC_WEAKREF(main);
> +#endif
> +
> char *pa_get_user_name(char *s, size_t l) {
> const char *p;
> char *name = NULL;
> @@ -218,6 +227,20 @@ char *pa_get_binary_name(char *s, size_t l) {
> }
> #endif
>
> +#if defined(HAVE_DLADDR) && defined(PA_GCC_WEAKREF)
> + {
> + Dl_info info;
> + if(_main) {
> + int err = dladdr(&_main, &info);
> + if (err != 0) {
> + char *p = pa_realpath(info.dli_fname);
> + if (p)
> + return p;
> + }
> + }
> + }
> +#endif
> +
> #if defined(HAVE_SYS_PRCTL_H) && defined(PR_GET_NAME)
> {
>
More information about the pulseaudio-discuss
mailing list