diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-04-24 08:43:38 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-04-24 08:43:38 +0200 |
commit | 04abcfd4f3a0fbdc29bfcbb88c4cec7d417fe0c7 (patch) | |
tree | 6800cdb4583800e309df24f07a59207dc009ea5f /src/grt/grt-dynload.c | |
parent | c73726c65ed88037d26731352cd779bc66b09c68 (diff) | |
download | ghdl-04abcfd4f3a0fbdc29bfcbb88c4cec7d417fe0c7.tar.gz ghdl-04abcfd4f3a0fbdc29bfcbb88c4cec7d417fe0c7.tar.bz2 ghdl-04abcfd4f3a0fbdc29bfcbb88c4cec7d417fe0c7.zip |
grt: extract grt-dynload from grt-cvpi
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 |