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