summaryrefslogtreecommitdiff
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)
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;
}