Don't use nested function. Call _dl_catch_error with additional
authordrepper <drepper>
Sat, 29 Mar 1997 15:22:19 +0000 (15:22 +0000)
committerdrepper <drepper>
Sat, 29 Mar 1997 15:22:19 +0000 (15:22 +0000)
argument with pointer to data.

elf/dlopen.c

index c2cf8cd..4963e99 100644 (file)
 #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;
 }