| #ifndef LLDB_TEST_DYLIB_H |
| #define LLDB_TEST_DYLIB_H |
| |
| #include <stdio.h> |
| |
| #ifdef _WIN32 |
| #include <Windows.h> |
| |
| #define dylib_get_symbol(handle, name) GetProcAddress((HMODULE)handle, name) |
| #define dylib_close(handle) (!FreeLibrary((HMODULE)handle)) |
| #else |
| #include <dlfcn.h> |
| |
| #define dylib_get_symbol(handle, name) dlsym(handle, name) |
| #define dylib_close(handle) dlclose(handle) |
| #endif |
| |
| |
| inline void *dylib_open(const char *name) { |
| char dylib_prefix[] = |
| #ifdef _WIN32 |
| ""; |
| #else |
| "lib"; |
| #endif |
| char dylib_suffix[] = |
| #ifdef _WIN32 |
| ".dll"; |
| #elif defined(__APPLE__) |
| ".dylib"; |
| #else |
| ".so"; |
| #endif |
| char fullname[1024]; |
| snprintf(fullname, sizeof(fullname), "%s%s%s", dylib_prefix, name, dylib_suffix); |
| #ifdef _WIN32 |
| return LoadLibraryA(fullname); |
| #else |
| return dlopen(fullname, RTLD_NOW); |
| #endif |
| } |
| |
| inline const char *dylib_last_error() { |
| #ifndef _WIN32 |
| return dlerror(); |
| #else |
| DWORD err = GetLastError(); |
| char *msg; |
| FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, |
| NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (char *)&msg, 0, NULL); |
| return msg; |
| #endif |
| } |
| |
| #endif |