]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Compile in the ALSA search path instead of relying on ld.so.conf.
authorSteve Langasek <steve.langasek@canonical.com>
Wed, 15 May 2013 17:05:59 +0000 (19:05 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 16 May 2013 08:13:28 +0000 (10:13 +0200)
The Ubuntu package currently uses ld.so.conf.d fragments to add
/usr/lib/alsa-lib and /usr/lib{32,64}/alsa-lib to the dlopen search path.
These don't *belong* on the global search path, and it becomes much more
problematic to put them there with the advent of multiarch because each
architecture then needs its own distinct config file to add the separate
path... which is then also put in the global library namespace.  Instead,
let ALSA make use of the already defined ALSA_PLUGIN_DIR to look up
plugins.

Signed-off-by: Jordi Mallach <jordi@debian.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/dlmisc.c

index 2de02340c3ff26a7ce4774517094187581d24d42..4b8a02cd89f63b7207da0c825564045a4c76717f 100644 (file)
@@ -67,7 +67,25 @@ void *snd_dlopen(const char *name, int mode)
 #endif
 #endif
 #ifdef HAVE_LIBDL
-       return dlopen(name, mode);
+       /*
+        * Handle the plugin dir not being on the default dlopen search
+        * path, without resorting to polluting the entire system namespace
+        * via ld.so.conf.
+        */
+       void *handle = NULL;
+       char *filename;
+
+       if (name && name[0] != '/') {
+               filename = malloc(sizeof(ALSA_PLUGIN_DIR) + 1 + strlen(name) + 1);
+               strcpy(filename, ALSA_PLUGIN_DIR);
+               strcat(filename, "/");
+               strcat(filename, name);
+               handle = dlopen(filename, mode);
+               free(filename);
+       }
+       if (!handle)
+               handle = dlopen(name, mode);
+       return handle;
 #else
        return NULL;
 #endif