[pulseaudio-discuss] [PATCH] util: Try finding out application name using dladdr if available
Peter Meerwald
pmeerw at pmeerw.net
Mon Aug 18 01:54:21 PDT 2014
Hi Felipe,
it would be good to describe what the patch is for;
I assume fixing hurd?
dladdr() is a GNU extension; the manpage does
#define _GNU_SOURCE
#include <dlfcn.h>
p.
> ---
> configure.ac | 2 ++
> src/pulse/util.c | 18 ++++++++++++++++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/configure.ac b/configure.ac
> index 837e81e..2b011fb 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..67e23dc 100644
> --- a/src/pulse/util.c
> +++ b/src/pulse/util.c
> @@ -32,6 +32,7 @@
> #include <time.h>
> #include <unistd.h>
> #include <sys/types.h>
> +#include <dlfcn.h>
>
> #ifdef HAVE_PWD_H
> #include <pwd.h>
> @@ -64,6 +65,10 @@
>
> #include "util.h"
>
> +#ifdef HAVE_DLADDR
> +extern int main(int, char*[]);
> +#endif
> +
> char *pa_get_user_name(char *s, size_t l) {
> const char *p;
> char *name = NULL;
> @@ -218,6 +223,19 @@ char *pa_get_binary_name(char *s, size_t l) {
> }
> #endif
>
> +#ifdef HAVE_DLADDR
> + {
> + Dl_info DLInfo;
> + int err = dladdr(&main, &DLInfo);
> + if (err != 0) {
> + char *p = pa_realpath(DLInfo.dli_fname);
> + if (p) {
> + return p;
> + }
> + }
> + }
> +#endif
> +
> #if defined(HAVE_SYS_PRCTL_H) && defined(PR_GET_NAME)
> {
>
>
--
Peter Meerwald
+43-664-2444418 (mobile)
More information about the pulseaudio-discuss
mailing list