From ac584a4c61259908bf5c047691137f51f71faa95 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Mon, 25 Feb 2019 01:27:37 -0500
Subject: project: static linking: dlfake: initial commit.

---
 wrappers/dlfcn/dlfake.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 wrappers/dlfcn/dlfake.h | 30 ++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 wrappers/dlfcn/dlfake.c
 create mode 100644 wrappers/dlfcn/dlfake.h

(limited to 'wrappers/dlfcn')

diff --git a/wrappers/dlfcn/dlfake.c b/wrappers/dlfcn/dlfake.c
new file mode 100644
index 0000000..d347bf0
--- /dev/null
+++ b/wrappers/dlfcn/dlfake.c
@@ -0,0 +1,42 @@
+#include "dlfake.h"
+#include "linkage/inittab.h"
+
+extern struct _inittab _PyImport_Inittab[];
+
+void * dlfake_dlopen(const char * name, int mode)
+{
+	struct _inittab * pyext;
+
+	if (!name)
+		return _PyImport_Inittab;
+
+	for (pyext=_PyImport_Inittab; pyext->name; pyext++)
+		if (!strcmp(name,pyext->name))
+			return _PyImport_Inittab;
+
+	return 0;
+}
+
+int dlfake_dlclose(void * handle)
+{
+	return -1;
+}
+
+void * dlfake_dlsym(void * handle, const char * sym)
+{
+	return 0;
+}
+
+static const char dlfake_errstr[] =
+	"dlfake_dlerror(): "
+	"not implemented";
+
+char * dlfake_dlerror(void)
+{
+	return (char *)dlfake_errstr;
+}
+
+int dlfake_dladdr(const void * addr, void * info)
+{
+	return 0;
+}
diff --git a/wrappers/dlfcn/dlfake.h b/wrappers/dlfcn/dlfake.h
new file mode 100644
index 0000000..87ccab7
--- /dev/null
+++ b/wrappers/dlfcn/dlfake.h
@@ -0,0 +1,30 @@
+#ifndef _CTYPES_DLFCN_H_
+#define _CTYPES_DLFCN_H_
+
+#ifndef PY_ALL_STATIC
+#error  something went wrong
+#endif
+
+#include <dlfcn.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *  dlfake_dlopen(const char *, int);
+int     dlfake_dlclose(void *);
+void *  dlfake_dlsym(void *, const char *);
+char *  dlfake_dlerror(void);
+int     dlfake_dladdr(const void *, void *);
+
+#define ctypes_dlopen  dlfake_dlopen
+#define ctypes_dlclose dlfake_dlclose
+#define ctypes_dlsym   dlfake_dlsym
+#define ctypes_dladdr  dlfake_dladdr
+#define ctypes_dlerror dlfake_dlerror
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
-- 
cgit v1.2.3