fix typo in dynamic linker path file loading code
[musl] / src / ldso / dynlink.c
index 13bf16a..66f22be 100644 (file)
@@ -102,7 +102,6 @@ static int ldso_fail;
 static jmp_buf rtld_fail;
 static pthread_rwlock_t lock;
 static struct debug debug;
-static size_t *auxv;
 static size_t tls_cnt, tls_offset, tls_align = 4*sizeof(size_t);
 static pthread_mutex_t init_fini_lock = { ._m_type = PTHREAD_MUTEX_RECURSIVE };
 
@@ -435,7 +434,7 @@ static struct dso *load_library(const char *name)
        char buf[2*NAME_MAX+2];
        const char *pathname;
        unsigned char *base, *map;
-       size_t dyno, map_len;
+       size_t map_len;
        struct dso *p, temp_dso = {0};
        int fd;
        struct stat st;
@@ -479,13 +478,16 @@ static struct dso *load_library(const char *name)
                        if (!sys_path) {
                                FILE *f = fopen(ETC_LDSO_PATH, "rbe");
                                if (f) {
-                                       if (getline(&sys_path, (size_t[1]){0}, f) > 0)
-                                               sys_path[strlen(sys_path)-1]=0;
+                                       if (getline(&sys_path, (size_t[1]){0}, f) > 0) {
+                                               size_t l = strlen(sys_path);
+                                               if (l && sys_path[l-1]=='\n')
+                                                       sys_path[l-1] = 0;
+                                       }
                                        fclose(f);
                                }
                        }
-                       if (sys_path) fd = path_open(name, sys_path, buf, sizeof buf);
-                       else fd = path_open(name, "/lib:/usr/local/lib:/usr/lib", buf, sizeof buf);
+                       if (!sys_path) sys_path = "/lib:/usr/local/lib:/usr/lib";
+                       fd = path_open(name, sys_path, buf, sizeof buf);
                }
                pathname = buf;
        }
@@ -798,6 +800,7 @@ void *__dynlink(int argc, char **argv)
        struct dso *const vdso = builtin_dsos+2;
        char *env_preload=0;
        size_t vdso_base;
+       size_t *auxv;
 
        /* Find aux vector just past environ[] */
        for (i=argc+1; argv[i]; i++)
@@ -866,7 +869,7 @@ void *__dynlink(int argc, char **argv)
        } else {
                int fd;
                char *ldname = argv[0];
-               size_t dyno, l = strlen(ldname);
+               size_t l = strlen(ldname);
                if (l >= 3 && !strcmp(ldname+l-3, "ldd")) ldd_mode = 1;
                *argv++ = (void *)-1;
                if (argv[0] && !strcmp(argv[0], "--")) *argv++ = (void *)-1;
@@ -962,7 +965,6 @@ void *__dynlink(int argc, char **argv)
 
        update_tls_size();
        if (tls_cnt) {
-               struct dso *p;
                void *mem = mmap(0, libc.tls_size, PROT_READ|PROT_WRITE,
                        MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
                if (mem==MAP_FAILED ||
@@ -1072,7 +1074,7 @@ void *dlopen(const char *file, int mode)
 
        update_tls_size();
 
-       if (ssp_used) __init_ssp(auxv);
+       if (ssp_used) __init_ssp(libc.auxv);
 
        _dl_debug_state();
        orig_tail = tail;