add getopt reset support
[musl] / src / ldso / dynlink.c
index 93a4b44..960e089 100644 (file)
@@ -376,7 +376,7 @@ static int path_open(const char *name, const char *search, char *buf, size_t buf
                z = strchr(s, ':');
                l = z ? z-s : strlen(s);
                snprintf(buf, buf_size, "%.*s/%s", l, s, name);
-               if ((fd = open(buf, O_RDONLY))>=0) return fd;
+               if ((fd = open(buf, O_RDONLY|O_CLOEXEC))>=0) return fd;
                s += l;
        }
 }
@@ -423,7 +423,7 @@ static struct dso *load_library(const char *name)
        }
        if (strchr(name, '/')) {
                pathname = name;
-               fd = open(name, O_RDONLY);
+               fd = open(name, O_RDONLY|O_CLOEXEC);
        } else {
                /* Search for the name to see if it's already loaded */
                for (p=head->next; p; p=p->next) {
@@ -438,7 +438,7 @@ static struct dso *load_library(const char *name)
                if (fd < 0 && env_path) fd = path_open(name, env_path, buf, sizeof buf);
                if (fd < 0) {
                        if (!sys_path) {
-                               FILE *f = fopen(ETC_LDSO_PATH, "r");
+                               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;
@@ -973,7 +973,7 @@ int __dladdr(void *addr, Dl_info *info)
        return 1;
 }
 
-void *__dlsym(void *p, const char *s, void *ra)
+void *__dlsym(void *restrict p, const char *restrict s, void *restrict ra)
 {
        void *res;
        pthread_rwlock_rdlock(&lock);
@@ -986,7 +986,7 @@ void *dlopen(const char *file, int mode)
 {
        return 0;
 }
-void *__dlsym(void *p, const char *s, void *ra)
+void *__dlsym(void *restrict p, const char *restrict s, void *restrict ra)
 {
        return 0;
 }