diff --git a/src/dlmisc.c b/src/dlmisc.c index f64c716..a413233 100644 --- a/src/dlmisc.c +++ b/src/dlmisc.c @@ -34,6 +34,9 @@ #endif #include <limits.h> +#include <sys/types.h> +#include <dirent.h> + #if defined(HAVE_LIBDL) && defined(__GLIBC__) && !defined(__UCLIBC__) #define DL_ORIGIN_AVAILABLE 1 #endif @@ -79,6 +82,16 @@ static void snd_dlinfo_origin(char *path, size_t path_len) #endif } +static unsigned int checkExist(const char* dirName) { + DIR* dir = opendir(dirName); + if(dir) { + closedir(dir); + return 1; + } else { + return 0; + } +} + /** * * \brief Compose the dynamic path @@ -94,8 +107,14 @@ int snd_dlpath(char *path, size_t path_len, const char *name) const char *env = getenv("ALSA_PLUGIN_DIR"); if (env) { snd_plugin_dir = strdup(env); + } else if(checkExist(ALSA_PLUGIN_DIR) ) { + snd_plugin_dir = strdup(ALSA_PLUGIN_DIR); + } else if(sizeof(void*) == 8 && checkExist("/usr/lib64/alsa-lib") ) { + snd_plugin_dir = strdup("/usr/lib64/alsa-lib"); + } else if(sizeof(void*) == 4 && checkExist("/usr/lib32/alsa-lib") ) { + snd_plugin_dir = strdup("/usr/lib32/alsa-lib"); } else { - snd_dlinfo_origin(path, path_len); + snd_plugin_dir = strdup("/usr/lib/alsa-lib"); } snd_plugin_dir_set = 1; }