summaryrefslogtreecommitdiff
path: root/PC/os2emx/dllentry.c
diff options
context:
space:
mode:
Diffstat (limited to 'PC/os2emx/dllentry.c')
-rw-r--r--PC/os2emx/dllentry.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/PC/os2emx/dllentry.c b/PC/os2emx/dllentry.c
new file mode 100644
index 0000000000..511c3d9679
--- /dev/null
+++ b/PC/os2emx/dllentry.c
@@ -0,0 +1,54 @@
+/*
+ This is the entry point for Python DLL(s).
+ It also provides an getenv() function that works from within DLLs.
+*/
+
+#define NULL 0
+
+/* Make references to imported symbols to pull them from static library */
+#define REF(s) extern void s (); void *____ref_##s = &s;
+
+REF (Py_Main);
+
+#if defined (__EMX__)
+
+#include <signal.h>
+
+extern int _CRT_init (void);
+extern void _CRT_term (void);
+extern void __ctordtorInit (void);
+extern void __ctordtorTerm (void);
+
+unsigned long _DLL_InitTerm (unsigned long mod_handle, unsigned long flag)
+{
+ switch (flag)
+ {
+ case 0:
+ if (_CRT_init ()) return 0;
+ __ctordtorInit ();
+ /* Ignore fatal signals */
+ signal (SIGSEGV, SIG_IGN);
+ signal (SIGFPE, SIG_IGN);
+ return 1;
+ case 1:
+ __ctordtorTerm ();
+ _CRT_term ();
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+#endif
+
+/* A version of getenv() that works from DLLs */
+extern int DosScanEnv (const char *pszName, char **ppszValue);
+
+char *getenv (const char *name)
+{
+ char *value;
+ if (DosScanEnv (name, &value))
+ return NULL;
+ else
+ return value;
+}