about summary refs log tree commit diff
path: root/elf/loadfail.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-08-15 08:06:15 +0000
committerUlrich Drepper <drepper@redhat.com>2000-08-15 08:06:15 +0000
commitfc7f617d300f075fe28567391b10b4c5d64be46f (patch)
treeb0a8765937d52ccdb09a796e4e0c322dae9b804b /elf/loadfail.c
parent07a3d63e524f13dd09e14adb0ac2623f6600401d (diff)
downloadglibc-fc7f617d300f075fe28567391b10b4c5d64be46f.tar.gz
glibc-fc7f617d300f075fe28567391b10b4c5d64be46f.tar.xz
glibc-fc7f617d300f075fe28567391b10b4c5d64be46f.zip
Update.
	* include/link.h: Include sysd-link.h.
	* sysdeps/generic/sysd-link.h: New file.
	* sysdeps/unix/sysv/linux/sysd-link.h: New file.
	* elf/Makefile (distribute): Add sysd-link.h.
	* elf/dl-load.c: Use definitions from sysd-link.h instead of stat
	types and functions directly.
	* elf/dl-misc.c: Likewise.
	* elf/dl-profile.c: Likewise.

	* elf/loadfail.c (main): Close all successfully loaded objects.
Diffstat (limited to 'elf/loadfail.c')
-rw-r--r--elf/loadfail.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/elf/loadfail.c b/elf/loadfail.c
index 60deb7737b..e423356348 100644
--- a/elf/loadfail.c
+++ b/elf/loadfail.c
@@ -1,25 +1,36 @@
 #include <dlfcn.h>
 #include <error.h>
+#include <mcheck.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 int
 main (void)
 {
+  void *su[5];
   void *h;
+  int n;
 
-  if (dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj2.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj3.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj4.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj5.so", RTLD_GLOBAL | RTLD_NOW) == NULL)
+  mtrace ();
+
+  if ((su[0] = dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[1] = dlopen ("testobj2.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[2] = dlopen ("testobj3.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[3] = dlopen ("testobj4.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[4] = dlopen ("testobj5.so", RTLD_GLOBAL | RTLD_NOW)) == NULL)
     error (EXIT_FAILURE, 0, "failed to load shared object: %s", dlerror ());
 
   h = dlopen ("failobj.so", RTLD_GLOBAL | RTLD_NOW);
 
   printf ("h = %p, %s\n", h, h == NULL ? "ok" : "fail");
 
+  for (n = 0; n < 5; ++n)
+    if (dlclose (su[n]) != 0)
+      {
+	printf ("failed to unload su[%d]: %s\n", n, dlerror ());
+	exit (EXIT_FAILURE);
+      }
+
   return h != NULL;
 }