blob: fcf04a96008a1462c7314f6364a2e078e3128464 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include "soul.h"
#include <dlfcn.h>
#include <stdio.h>
#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;
}
|