diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-02-16 21:35:21 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-02-16 21:35:21 +0000 |
commit | 9da4b6afffd849f85c4892a2016c899358db99af (patch) | |
tree | ba19b50b6e9bf22755a042d22cbacb4d68c45b41 /test/dlopen/dlstatic.c | |
parent | 138adeccbd94db291a2c2010a941e70cba294a2a (diff) |
make sure static variables are re-initialized everytime
Diffstat (limited to 'test/dlopen/dlstatic.c')
-rw-r--r-- | test/dlopen/dlstatic.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/dlopen/dlstatic.c b/test/dlopen/dlstatic.c new file mode 100644 index 000000000..57c8c5dd1 --- /dev/null +++ b/test/dlopen/dlstatic.c @@ -0,0 +1,43 @@ +#include <fcntl.h> +#include <stdlib.h> +#include <stdio.h> +#include <dlfcn.h> +#include <stdint.h> + +#define LIBNAME "libstatic.so" + +int load_and_test(void) +{ + void *handle; + int (*mystatic)(void); + + handle = dlopen(LIBNAME, RTLD_LAZY); + if (!handle) { + fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror()); + return 1; + } + + mystatic = dlsym(handle, "static_test"); + if (mystatic == NULL) { + fprintf(stderr, "Could not locate symbol 'static_test': %s\n", dlerror()); + return 1; + } + + if (!mystatic()) { + fprintf(stderr, "mystatic() failed: static vars were not setup properly\n"); + return 1; + } + + dlclose(handle); + + return 0; +} + +int main(int argc, char **argv) +{ + int count = 5; + while (count-- > 0) + if (load_and_test()) + return EXIT_FAILURE; + return EXIT_SUCCESS; +} |