forked from OSchip/llvm-project
56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
#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
|