diff options
Diffstat (limited to 'src/grt/grt-dynload.c')
-rw-r--r-- | src/grt/grt-dynload.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/grt/grt-dynload.c b/src/grt/grt-dynload.c new file mode 100644 index 000000000..af595f454 --- /dev/null +++ b/src/grt/grt-dynload.c @@ -0,0 +1,52 @@ +#if defined(__WIN32__) +#include <windows.h> +void * +grt_dynload_open (const char *path) +{ + return (void *)LoadLibrary (path); +} + +void * +grt_dynload_symbol (void *handle, const char *symbol) +{ + return (void *)GetProcAddress ((HMODULE)handle, symbol); +} + +const char * +grt_dynload_error (void) +{ + static char msg[256]; + + FormatMessage + (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError (), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &msg, + sizeof (msg) - 1, + NULL); + return msg; +} + +#else + +#include <dlfcn.h> + +void * +grt_dynload_open (const char *path) +{ + return dlopen (path, RTLD_LAZY); +} + +void * +grt_dynload_symbol (void *handle, const char *symbol) +{ + return dlsym (handle, symbol); +} + +const char * +grt_dynload_error (void) +{ + return dlerror (); +} +#endif |