win32: dlopen v1
authorMarko Kreen <markokr@gmail.com>
Wed, 9 Sep 2009 18:20:05 +0000 (21:20 +0300)
committerMarko Kreen <markokr@gmail.com>
Wed, 9 Sep 2009 18:20:05 +0000 (21:20 +0300)
m4/usual.m4
usual/base_win32.h

index f0d621efad2d1c8a4faf407ac955d4c14f1b1147..5c266bbeba761d54047a771c0a97f7c0e2666c85 100644 (file)
@@ -112,7 +112,7 @@ AC_DEFUN([AC_USUAL_HEADER_CHECK], [
 AC_CHECK_HEADERS([sys/socket.h poll.h sys/poll.h sys/un.h])
 AC_CHECK_HEADERS([arpa/inet.h netinet/in.h netinet/tcp.h])
 AC_CHECK_HEADERS([sys/param.h sys/uio.h libgen.h pwd.h grp.h])
-AC_CHECK_HEADERS([sys/wait.h sys/mman.h syslog.h netdb.h])
+AC_CHECK_HEADERS([sys/wait.h sys/mman.h syslog.h netdb.h dlfcn.h])
 AC_CHECK_HEADERS([err.h pthread.h endian.h sys/endian.h byteswap.h])
 dnl ucred.h may have prereqs
 AC_CHECK_HEADERS([ucred.h sys/ucred.h], [], [], [
index fa94e07cea6f97de81aee3ebd2b288b93c391c8a..3a19a637ee90050a11dd8f57a7c96270b6da8ee7 100644 (file)
@@ -63,4 +63,36 @@ struct passwd {
 };
 static inline const struct passwd * getpwnam(const char *u) { 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(errno);
+}
+
 #endif