1*627f7eb2Smrg #include <stdlib.h> 2*627f7eb2Smrg #include <string.h> 3*627f7eb2Smrg #include <dlfcn.h> 4*627f7eb2Smrg #include <assert.h> 5*627f7eb2Smrg 6*627f7eb2Smrg extern void* rt_loadLibrary(const char*); 7*627f7eb2Smrg extern int rt_unloadLibrary(void*); 8*627f7eb2Smrg extern int rt_init(void); 9*627f7eb2Smrg extern int rt_term(void); 10*627f7eb2Smrg main(int argc,char * argv[])11*627f7eb2Smrgint main(int argc, char* argv[]) 12*627f7eb2Smrg { 13*627f7eb2Smrg if (!rt_init()) return EXIT_FAILURE; 14*627f7eb2Smrg const size_t pathlen = strrchr(argv[0], '/') - argv[0] + 1; 15*627f7eb2Smrg char *name = malloc(pathlen + sizeof("lib.so")); 16*627f7eb2Smrg memcpy(name, argv[0], pathlen); 17*627f7eb2Smrg memcpy(name+pathlen, "lib.so", sizeof("lib.so")); 18*627f7eb2Smrg 19*627f7eb2Smrg void *dlib = rt_loadLibrary(name); 20*627f7eb2Smrg free(name); 21*627f7eb2Smrg assert(dlib); 22*627f7eb2Smrg 23*627f7eb2Smrg int (*runTests)(void) = dlsym(dlib, "runTests"); 24*627f7eb2Smrg assert(runTests()); 25*627f7eb2Smrg assert(rt_unloadLibrary(dlib)); 26*627f7eb2Smrg if (!rt_term()) return EXIT_FAILURE; 27*627f7eb2Smrg return EXIT_SUCCESS; 28*627f7eb2Smrg } 29