]> code.delx.au - pulseaudio/commitdiff
try to use glib's g_get_application_name() to set PA_PROP_APPLICATION_NAME
authorLennart Poettering <lennart@poettering.net>
Sun, 1 Feb 2009 23:28:37 +0000 (00:28 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 1 Feb 2009 23:28:37 +0000 (00:28 +0100)
src/pulsecore/proplist-util.c

index 35c9985af9281cc47f5eb26ada7b714c9d5c2fe2..0a2d7183bd97249b65ddb1691b3a11be3aa01835 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <string.h>
 #include <locale.h>
+#include <dlfcn.h>
 
 #include <pulse/proplist.h>
 #include <pulse/utf8.h>
@@ -36,7 +37,6 @@
 #include "proplist-util.h"
 
 void pa_init_proplist(pa_proplist *p) {
-    int a, b;
 #if !HAVE_DECL_ENVIRON
     extern char **environ;
 #endif
@@ -99,22 +99,36 @@ void pa_init_proplist(pa_proplist *p) {
         }
     }
 
-    a = pa_proplist_contains(p, PA_PROP_APPLICATION_PROCESS_BINARY);
-    b = pa_proplist_contains(p, PA_PROP_APPLICATION_NAME);
-
-    if (!a || !b) {
+    if (!pa_proplist_contains(p, PA_PROP_APPLICATION_PROCESS_BINARY)) {
         char t[PATH_MAX];
         if (pa_get_binary_name(t, sizeof(t))) {
             char *c = pa_utf8_filter(t);
+            pa_proplist_sets(p, PA_PROP_APPLICATION_PROCESS_BINARY, c);
+            pa_xfree(c);
+        }
+    }
 
-            if (!a)
-                pa_proplist_sets(p, PA_PROP_APPLICATION_PROCESS_BINARY, c);
-            if (!b)
-                pa_proplist_sets(p, PA_PROP_APPLICATION_NAME, c);
+#ifdef RTLD_NOLOAD
+    if (!pa_proplist_contains(p, PA_PROP_APPLICATION_NAME)) {
+        void *dl;
 
-            pa_xfree(c);
+        if ((dl = dlopen("libglib-2.0", RTLD_NOLOAD))) {
+            const char *(*_g_get_application_name)(void);
+
+            if ((*(void**) &_g_get_application_name = dlsym(dl, "g_get_application_name")))
+                pa_proplist_sets(p, PA_PROP_APPLICATION_NAME, _g_get_application_name());
+
+            dlclose(dl);
         }
     }
+#endif
+
+    if (!pa_proplist_contains(p, PA_PROP_APPLICATION_NAME)) {
+        const char *t;
+
+        if ((t = pa_proplist_gets(p, PA_PROP_APPLICATION_PROCESS_BINARY)))
+            pa_proplist_sets(p, PA_PROP_APPLICATION_NAME, t);
+    }
 
     if (!pa_proplist_contains(p, PA_PROP_APPLICATION_LANGUAGE)) {
         const char *l;