diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-08-29 01:44:27 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-08-29 01:44:27 +0000 |
commit | 950398e1320255572f4228db94344dcd5f613455 (patch) | |
tree | e7aad239a0d2810fbd4aa70930b2e6fe94e97a47 | |
parent | * elf/dl-open.c (dl_open_worker): Allow $LIB and $PLATFORM in (diff) | |
download | glibc-950398e1320255572f4228db94344dcd5f613455.tar.gz glibc-950398e1320255572f4228db94344dcd5f613455.tar.bz2 glibc-950398e1320255572f4228db94344dcd5f613455.zip |
* elf/dl-load.c (_dl_init_paths): Expand DSTs.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | elf/dl-load.c | 20 |
2 files changed, 21 insertions, 1 deletions
@@ -1,5 +1,7 @@ 2006-08-28 Ulrich Drepper <drepper@redhat.com> + * elf/dl-load.c (_dl_init_paths): Expand DSTs. + * elf/dl-open.c (dl_open_worker): Allow $LIB and $PLATFORM in dlopen parameters. diff --git a/elf/dl-load.c b/elf/dl-load.c index 902ffc4109..36dc123c01 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -749,7 +749,25 @@ _dl_init_paths (const char *llp) { size_t nllp; const char *cp = llp; - char *llp_tmp = strdupa (llp); + char *llp_tmp; + +#ifdef SHARED + /* Expand DSTs. */ + size_t cnt = DL_DST_COUNT (llp, 1); + if (__builtin_expect (cnt == 0, 1)) + llp_tmp = strdupa (llp); + else + { + /* Determine the length of the substituted string. */ + size_t total = DL_DST_REQUIRED (l, llp, strlen (llp), cnt); + + /* Allocate the necessary memory. */ + llp_tmp = (char *) alloca (total + 1); + llp_tmp = _dl_dst_substitute (l, llp, llp_tmp, 1); + } +#else + llp_tmp = strdupa (llp); +#endif /* Decompose the LD_LIBRARY_PATH contents. First determine how many elements it has. */ |