os2 patch by Jeff Rush
diff --git a/Python/importdl.c b/Python/importdl.c
index 7f35d13..b11e1e3 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -47,6 +47,7 @@
    _AIX		-- AIX style dynamic linking
    MS_WIN32	-- Windows NT style dynamic linking (using DLLs)
    MS_WIN16	-- Windows 16-bit dynamic linking (using DLLs)
+   PYOS_OS2 -- IBM OS/2 dynamic linking (using DLLs)
    _DL_FUNCPTR_DEFINED	-- if the typedef dl_funcptr has been defined
    USE_MAC_DYNAMIC_LOADING -- Mac CFM shared libraries
    SHORT_EXT	-- short extension for dynamic module, e.g. ".so"
@@ -76,6 +77,17 @@
 #define LONG_EXT "module.sl"
 #endif 
 
+#if defined(PYOS_OS2)
+#define DYNAMIC_LINK
+#define  INCL_DOSERRORS
+#define  INCL_DOSMODULEMGR
+#include <os2.h>
+typedef int (* APIENTRY dl_funcptr)();
+#define _DL_FUNCPTR_DEFINED 1
+#define SHORT_EXT ".pyd"
+#define LONG_EXT ".dll"
+#endif
+
 #if defined(__NetBSD__)
 #define DYNAMIC_LINK
 #define USE_SHLIB
@@ -458,6 +470,32 @@
 		p = GetProcAddress(hDLL, funcname);
 	}
 #endif /* MS_WIN16 */
+
+#if defined(PYOS_OS2)
+	{
+		APIRET  rc;
+		HMODULE hDLL;
+        char failreason[256];
+
+		rc = DosLoadModule(failreason,
+                           sizeof(failreason),
+                           pathname,
+                           &hDLL);
+
+		if (rc != NO_ERROR) {
+			char errBuf[256];
+			sprintf(errBuf,
+				"DLL load failed, rc = %d, problem '%s': %s", rc, failreason);
+			PyErr_SetString(PyExc_ImportError, errBuf);
+			return NULL;
+		}
+
+        rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
+        if (rc != NO_ERROR)
+            p = NULL; /* Signify Failure to Acquire Entrypoint */
+	}
+#endif /* PYOS_OS2 */
+
 #ifdef USE_DL
 	p =  dl_loadmod(Py_GetProgramName(), pathname, funcname);
 #endif /* USE_DL */