#include "precompiled.h" #include "wdlfcn.h" #include "lib/path_util.h" #include "wposix_internal.h" static HMODULE HMODULE_from_void(void* handle) { return (HMODULE)handle; } static void* void_from_HMODULE(HMODULE hModule) { return (void*)hModule; } int dlclose(void* handle) { BOOL ok = FreeLibrary(HMODULE_from_void(handle)); WARN_RETURN_IF_FALSE(ok); return 0; } char* dlerror(void) { return 0; } void* dlopen(const char* so_name, int flags) { if(flags & RTLD_GLOBAL) debug_warn("dlopen: unsupported flag(s)"); // if present, strip .so extension; add .dll extension char dll_name[MAX_PATH]; strcpy_s(dll_name, ARRAY_SIZE(dll_name)-5, so_name); char* ext = (char*)path_extension(dll_name); if(ext[0] == '\0') // no extension strcat(dll_name, ".dll"); // safe else // need to replace extension SAFE_STRCPY(ext, "dll"); HMODULE hModule = LoadLibrary(dll_name); if(!hModule) debug_warn("dlopen failed"); return void_from_HMODULE(hModule); } void* dlsym(void* handle, const char* sym_name) { HMODULE hModule = HMODULE_from_void(handle); void* sym = GetProcAddress(hModule, sym_name); if(!sym) debug_warn("dlsym failed"); return sym; }