From 6b8de8b36916d6446109934a70c32d74bd5c5aac Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Sat, 22 Nov 1997 21:53:48 +0000 Subject: os2 patch by Jeff Rush --- Python/importdl.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'Python/importdl.c') diff --git a/Python/importdl.c b/Python/importdl.c index 7f35d13095..b11e1e3226 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -47,6 +47,7 @@ PERFORMANCE OF THIS SOFTWARE. _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 @@ typedef void (*dl_funcptr)(); #define LONG_EXT "module.sl" #endif +#if defined(PYOS_OS2) +#define DYNAMIC_LINK +#define INCL_DOSERRORS +#define INCL_DOSMODULEMGR +#include +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 @@ _PyImport_LoadDynamicModule(name, pathname, fp) 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 */ -- cgit v1.2.1