OSDN Git Service

Doh! I was returning with an incorrect pointer type when dlopening
authorEric Andersen <andersen@codepoet.org>
Wed, 15 Oct 2003 08:55:22 +0000 (08:55 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 15 Oct 2003 08:55:22 +0000 (08:55 -0000)
already loaded libs, which unsurprisingly would cause dlsym() to
not work at all...
 -Erik

ldso/libdl/dlib.c
ldso/libdl/libdl.c

index c54104f..ebd7b85 100644 (file)
@@ -186,13 +186,6 @@ void *_dlopen(const char *libname, int flag)
                _dl_unmap_cache();
                return NULL;
        }
-       if (tpnt->init_flag & INIT_FUNCS_CALLED) {
-
-           /* If the init and fini stuff has already been run, that means
-            * someone called dlopen on a library we already have opened, so
-            * we don't need to fix thing up any further... */
-           return tpnt;
-       }
 
        dyn_chain = (struct dyn_elf *) malloc(sizeof(struct dyn_elf));
        _dl_memset(dyn_chain, 0, sizeof(struct dyn_elf));
@@ -204,6 +197,13 @@ void *_dlopen(const char *libname, int flag)
        dyn_chain->next_handle = _dl_handles;
        _dl_handles = rpnt = dyn_chain;
 
+       if (tpnt->init_flag & INIT_FUNCS_CALLED) {
+           /* If the init and fini stuff has already been run, that means
+            * the dlopen'd library has already been loaded, and nothing
+            * further needs to be done. */
+           return (void *) dyn_chain;
+       }
+
 
 #ifdef __SUPPORT_LD_DEBUG__
        if(_dl_debug) 
index c54104f..ebd7b85 100644 (file)
@@ -186,13 +186,6 @@ void *_dlopen(const char *libname, int flag)
                _dl_unmap_cache();
                return NULL;
        }
-       if (tpnt->init_flag & INIT_FUNCS_CALLED) {
-
-           /* If the init and fini stuff has already been run, that means
-            * someone called dlopen on a library we already have opened, so
-            * we don't need to fix thing up any further... */
-           return tpnt;
-       }
 
        dyn_chain = (struct dyn_elf *) malloc(sizeof(struct dyn_elf));
        _dl_memset(dyn_chain, 0, sizeof(struct dyn_elf));
@@ -204,6 +197,13 @@ void *_dlopen(const char *libname, int flag)
        dyn_chain->next_handle = _dl_handles;
        _dl_handles = rpnt = dyn_chain;
 
+       if (tpnt->init_flag & INIT_FUNCS_CALLED) {
+           /* If the init and fini stuff has already been run, that means
+            * the dlopen'd library has already been loaded, and nothing
+            * further needs to be done. */
+           return (void *) dyn_chain;
+       }
+
 
 #ifdef __SUPPORT_LD_DEBUG__
        if(_dl_debug)