summaryrefslogtreecommitdiffstats
path: root/ldso/libdl/libdl.c
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2011-03-18 11:40:04 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2011-12-23 15:49:01 +0100
commite6fa350aa23280795a912d0edd989d7c98c62710 (patch)
tree470da95d5691be2025ed965037baf3234086ef86 /ldso/libdl/libdl.c
parent8f71a37896be4ce64c009b369117b252eb4de366 (diff)
downloaduClibc-alpine-e6fa350aa23280795a912d0edd989d7c98c62710.tar.bz2
uClibc-alpine-e6fa350aa23280795a912d0edd989d7c98c62710.tar.xz
ldso: support RTLD_NOLOAD
So application query if specified modile is loaded or not with dlopen. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Diffstat (limited to 'ldso/libdl/libdl.c')
-rw-r--r--ldso/libdl/libdl.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index 52c77b00a..49e90d042 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -288,7 +288,7 @@ void *dlopen(const char *libname, int flag)
#endif
/* A bit of sanity checking... */
- if (!(flag & (RTLD_LAZY|RTLD_NOW))) {
+ if (!(flag & (RTLD_LAZY|RTLD_NOW|RTLD_NOLOAD))) {
_dl_error_number = LD_BAD_HANDLE;
return NULL;
}
@@ -358,8 +358,9 @@ void *dlopen(const char *libname, int flag)
/* Try to load the specified library */
_dl_if_debug_print("Trying to dlopen '%s', RTLD_GLOBAL:%d RTLD_NOW:%d\n",
(char*)libname, (flag & RTLD_GLOBAL ? 1:0), (now_flag & RTLD_NOW ? 1:0));
- tpnt = _dl_load_shared_library(0, &rpnt, tfrom, (char*)libname, 0);
+ tpnt = _dl_load_shared_library((flag & RTLD_NOLOAD) ? DL_RESOLVE_NOLOAD : 0,
+ &rpnt, tfrom, (char*)libname, 0);
if (tpnt == NULL) {
_dl_unmap_cache();
return NULL;