From ccf42af5b2fd55728d8962b381f7ea1a05ca4050 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Thu, 14 Jun 2012 01:29:54 +0300 Subject: [PATCH] dlfcn: new module for dlopen compat functions --- usual/base_win32.h | 31 --------------------------- usual/dlfcn.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ usual/dlfcn.h | 47 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 31 deletions(-) create mode 100644 usual/dlfcn.c create mode 100644 usual/dlfcn.h diff --git a/usual/base_win32.h b/usual/base_win32.h index fbf6711..adbb1be 100644 --- a/usual/base_win32.h +++ b/usual/base_win32.h @@ -82,35 +82,4 @@ struct group { static inline struct group *getgrnam(const char *g) { return NULL; } static inline struct group *getgrgid(gid_t gid) { return NULL; } -/* - * Minimal dlopen, dlsym, dlclose, dlerror compat. - */ - -#define RTLD_LAZY 1 -#define RTLD_NOW 2 - -static inline void *dlopen(const char *fn, int flag) -{ - HMODULE h = LoadLibraryEx(fn, NULL, 0); - return h; -} - -static inline void *dlsym(void *hptr, const char *fname) -{ - HMODULE h = hptr; - FARPROC f = GetProcAddress(h, fname); - return f; -} - -static inline int dlclose(void *hptr) -{ - HMODULE h = hptr; - return FreeLibrary(h) ? 0 : -1; -} - -static inline const char *dlerror(void) -{ - return strerror(GetLastError()); -} - #endif diff --git a/usual/dlfcn.c b/usual/dlfcn.c new file mode 100644 index 0000000..fd439ba --- /dev/null +++ b/usual/dlfcn.c @@ -0,0 +1,52 @@ +/* + * Dynamic library loading. + * + * Copyright (c) 2007-2009 Marko Kreen + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef _WIN32 + +#include + +/* + * win32: Minimal dlopen, dlsym, dlclose, dlerror compat. + */ + +void *dlopen(const char *fn, int flag) +{ + HMODULE h = LoadLibraryEx(fn, NULL, 0); + return h; +} + +void *dlsym(void *hptr, const char *fname) +{ + HMODULE h = hptr; + FARPROC f = GetProcAddress(h, fname); + return f; +} + +int dlclose(void *hptr) +{ + HMODULE h = hptr; + return FreeLibrary(h) ? 0 : -1; +} + +const char *dlerror(void) +{ + return strerror(GetLastError()); +} + +#endif + diff --git a/usual/dlfcn.h b/usual/dlfcn.h new file mode 100644 index 0000000..e1a1374 --- /dev/null +++ b/usual/dlfcn.h @@ -0,0 +1,47 @@ +/* + * Dynamic library loading. + * + * Copyright (c) 2007-2009 Marko Kreen + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _USUAL_DLFCN_H_ +#define _USUAL_DLFCN_H_ + +#ifdef HAVE_DLFCN_H + +#include + +#elif defined(_WIN32) + +#define dlopen(a,b) usual_dlopen(a,b) +#define dlsym(a,b) usual_dlsym(a,b) +#define dlclose(a) usual_dlclose(a) +#define dlerror(...) usual_dlerror(__VA_ARGS__) + +/* + * win32: Minimal dlopen, dlsym, dlclose, dlerror compat. + */ + +#define RTLD_LAZY 1 +#define RTLD_NOW 2 + +void *dlopen(const char *fn, int flag); +void *dlsym(void *hptr, const char *fname); +int dlclose(void *hptr); +const char *dlerror(void); + +#endif /* _WIN32 */ +#endif /* !_USUAL_DLFCN_H_ */ + -- 2.39.5