* elf/dl-load.c (_dl_init_paths): Expand DSTs.
authorUlrich Drepper <drepper@redhat.com>
Tue, 29 Aug 2006 01:44:27 +0000 (01:44 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 29 Aug 2006 01:44:27 +0000 (01:44 +0000)
ChangeLog
elf/dl-load.c

index 2116676..5b771b3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
 
index 902ffc4..36dc123 100644 (file)
@@ -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.  */