put everything back to one directory
[libc-test] / src / general / dlopen.c
1 #include <dlfcn.h>
2 #include "test.h"
3
4 int foo;
5
6 int main()
7 {
8         void *h, *g;
9         int *i, *i2;
10         char *s;
11         void (*f)(void);
12
13         h = dlopen("./dlopen_dso.so", RTLD_LAZY|RTLD_LOCAL);
14         if (!h)
15                 error("dlopen ./dlopen_dso.so failed: %s\n", dlerror());
16         i = dlsym(h, "i");
17         if (!i)
18                 error("dlsym i failed: %s\n", dlerror());
19         if (*i != 1)
20                 error("initialization failed: want i=1 got i=%d\n", *i);
21         f = (void (*)(void))dlsym(h, "f");
22         if (!f)
23                 error("dlsym f failed: %s\n", dlerror());
24         f();
25         if (*i != 2)
26                 error("f call failed: want i=2 got i=%d\n", *i);
27         if (dlclose(h))
28                 error("dlclose failed: %s\n", dlerror());
29
30         g = dlopen(0, RTLD_LAZY|RTLD_LOCAL);
31         if (!g)
32                 error("dlopen 0 failed: %s\n", dlerror());
33         i2 = dlsym(g, "i");
34         s = dlerror();
35         if (i2 || s == 0)
36                 error("dlsym i should have failed\n");
37         if (dlsym(g, "main") == 0)
38                 error("dlsym main failed: %s\n", dlerror());
39
40         h = dlopen("./dlopen_dso.so", RTLD_LAZY|RTLD_GLOBAL);
41         i2 = dlsym(g, "i");
42         if (!i2)
43                 error("dlsym i failed: %s\n", dlerror());
44         if (*i2 != 2)
45                 error("want i2=2, got i2=%d\n", *i2);
46         if (dlclose(g))
47                 error("dlclose failed: %s\n", dlerror());
48         return test_status;
49 }