#include "soul.h" #include #include #include "soul_exports.h" int load_soul_from_dl_(dlhandle_t dl, soul_t *soul) { void *ptr; int ret = 0; const char **name = dlsym(dl, "soul_name"); if (name) { soul->soul_name = *name; } else { soul->soul_name = NULL; } soul->state = NULL; soul->library_handle = dl; #define LOAD_SYM(ret_type, sym, args) \ do { \ ptr = dlsym(dl, #sym); \ if (!ptr) { \ fprintf(stderr, "Soul missing %s\n", #sym); \ ret |= 1; \ } \ soul->sym = (ret_type(*) args)ptr; \ } while (0); ARKSOUL_EXPORTS(LOAD_SYM); #undef LOAD_SYM return ret; }