dlfcn: new module for dlopen compat functions
authorMarko Kreen <markokr@gmail.com>
Wed, 13 Jun 2012 22:29:54 +0000 (01:29 +0300)
committerMarko Kreen <markokr@gmail.com>
Thu, 3 Jan 2013 23:08:17 +0000 (01:08 +0200)
usual/base_win32.h
usual/dlfcn.c [new file with mode: 0644]
usual/dlfcn.h [new file with mode: 0644]

index fbf6711708c4b7a4371814b084912ccd7f95c244..adbb1be4d34a3d9bf6f20990a899a4a134c0feed 100644 (file)
@@ -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 (file)
index 0000000..fd439ba
--- /dev/null
@@ -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 <usual/string.h>
+
+/*
+ * 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 (file)
index 0000000..e1a1374
--- /dev/null
@@ -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 <dlfcn.h>
+
+#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_ */
+