summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Langasek <steve.langasek@canonical.com>2013-05-15 19:05:59 +0200
committerTakashi Iwai <tiwai@suse.de>2013-05-16 10:13:28 +0200
commitb906db19ef9f4fb7886003072e550391cc1ac651 (patch)
treeff79c26e9e6ab49df32f280e2ce4acffeb26c1e9
parent2b84ab0514cff71cb40ef96253f4624e39e9860b (diff)
downloadalsa-lib-b906db19ef9f4fb7886003072e550391cc1ac651.tar.gz
Compile in the ALSA search path instead of relying on ld.so.conf.
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>
-rw-r--r--src/dlmisc.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/dlmisc.c b/src/dlmisc.c
index 2de02340..4b8a02cd 100644
--- a/src/dlmisc.c
+++ b/src/dlmisc.c
@@ -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