1f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger/*
2f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger * Stub dlfcn implementation for systems that lack shared library support
3f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger * but obviously can still reference compiled-in symbols.
4f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger */
5f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
6f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#ifndef NO_SHARED_LIBS
7f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#include_next <dlfcn.h>
8f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#else
9f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
10f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#define RTLD_LAZY 0
11f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#define _FAKE_DLFCN_HDL (void *)0xbeefcafe
12f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
13f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysingerstatic inline void *dlopen(const char *file, int flag)
14f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger{
15f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	if (file == NULL)
16f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger		return _FAKE_DLFCN_HDL;
17f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	else
18f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger		return NULL;
19f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger}
20f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
21f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysingerextern void *_dlsym(const char *sym);
22f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysingerstatic inline void *dlsym(void *handle, const char *sym)
23f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger{
24f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	if (handle != _FAKE_DLFCN_HDL)
25f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger		return NULL;
26f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	return _dlsym(sym);
27f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger}
28f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
29f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysingerstatic inline char *dlerror(void)
30f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger{
31f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	return NULL;
32f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger}
33f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
34f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysingerstatic inline int dlclose(void *handle)
35f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger{
36f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger	return (handle == _FAKE_DLFCN_HDL) ? 0 : 1;
37f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger}
38f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger
39f2e27cfb016e2465cd3f07e0b556058060702578Mike Frysinger#endif
40