summaryrefslogtreecommitdiff
path: root/src/linker/dlfcn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/linker/dlfcn.c')
-rw-r--r--src/linker/dlfcn.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/linker/dlfcn.c b/src/linker/dlfcn.c
index 38fc215..22d212a 100644
--- a/src/linker/dlfcn.c
+++ b/src/linker/dlfcn.c
@@ -67,10 +67,11 @@ void *bionic_dlopen(const char *filename, int flag)
verbose("%s (%d)", filename, flag);
soinfo *ret;
pthread_mutex_lock(&apkenv_dl_lock);
- ret = apkenv_find_library(filename);
+ ret = apkenv_find_library(filename, false);
if (unlikely(ret == NULL)) {
- set_dlerror(DL_ERR_CANNOT_LOAD_LIBRARY);
+ if (!(ret = dlopen(filename, flag)))
+ set_dlerror(DL_ERR_CANNOT_LOAD_LIBRARY);
} else {
apkenv_call_constructors_recursive(ret);
ret->refcount++;
@@ -102,12 +103,6 @@ void *bionic_dlsym(void *handle, const char *symbol)
pthread_mutex_lock(&apkenv_dl_lock);
-#if 0
- if(unlikely(handle == 0)) {
- set_dlerror(DL_ERR_INVALID_LIBRARY_HANDLE);
- goto err;
- }
-#endif
if(unlikely(symbol == 0)) {
set_dlerror(DL_ERR_BAD_SYMBOL_NAME);
goto err;
@@ -127,6 +122,11 @@ void *bionic_dlsym(void *handle, const char *symbol)
}
}
+ if(unlikely(handle == 0)) {
+ set_dlerror(DL_ERR_INVALID_LIBRARY_HANDLE);
+ goto err;
+ }
+
if(handle == RTLD_DEFAULT) {
sym = apkenv_lookup(symbol, &found, NULL);
} else if(handle == RTLD_NEXT) {