diff options
Diffstat (limited to 'elf/dlopen.c')
-rw-r--r-- | elf/dlopen.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/elf/dlopen.c b/elf/dlopen.c index c2cf8cd58d..4963e9962e 100644 --- a/elf/dlopen.c +++ b/elf/dlopen.c @@ -21,15 +21,31 @@ #include <link.h> #include <dlfcn.h> -void * -dlopen (const char *file, int mode) +struct dlopen_args { + /* The arguments for dlopen_doit. */ + const char *file; + int mode; + /* The return value of dlopen_doit. */ struct link_map *new; +}; + - void doit (void) - { - new = _dl_open (file ?: "", mode); - } +static void +dlopen_doit (void *a) +{ + struct dlopen_args *args = (struct dlopen_args *) a; + + args->new = _dl_open (args->file ?: "", args->mode); +} + + +void * +dlopen (const char *file, int mode) +{ + struct dlopen_args args; + args.file = file; + args.mode = mode; - return _dlerror_run (doit) ? NULL : new; + return _dlerror_run (dlopen_doit, &args) ? NULL : args.new; } |