blob: 098c4b0a748ea5bd2e89b577e8c17ccbd45349ae (
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 "world.h"
#include <dlfcn.h>
#include <stdio.h>
#include "world_exports.h"
int load_world_from_dl_(dlhandle_t dl, world_t *world)
{
void *ptr;
int ret = 0;
const char **name = dlsym(dl, "world_name");
if (name) {
world->world_name = *name;
}
else {
world->world_name = NULL;
}
world->state = NULL;
world->library_handle = dl;
#define LOAD_SYM(ret_type, sym, args) \
do { \
ptr = dlsym(dl, #sym); \
if (!ptr) { \
fprintf(stderr, "World missing %s\n", #sym); \
ret |= 1; \
} \
world->sym = (ret_type(*) args)ptr; \
} while (0);
ARKWORLD_EXPORTS(LOAD_SYM);
#undef LOAD_SYM
return ret;
}
|