blob: f7264da04ce6dc2842ee7590bb48bd966dde3433 [file] [log] [blame]
Guido van Rossum22a1d361999-12-20 21:18:49 +00001
2/* Support for dynamic loading of extension modules */
3
4#define INCL_DOSERRORS
5#define INCL_DOSMODULEMGR
6#include <os2.h>
7
8#include "Python.h"
9#include "importdl.h"
10
11
12const struct filedescr _PyImport_DynLoadFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000013 {".pyd", "rb", C_EXTENSION},
14 {".dll", "rb", C_EXTENSION},
15 {0, 0}
Guido van Rossum22a1d361999-12-20 21:18:49 +000016};
17
Victor Stinner42040fb2011-02-22 23:16:19 +000018dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000019 const char *pathname, FILE *fp)
Guido van Rossum22a1d361999-12-20 21:18:49 +000020{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000021 dl_funcptr p;
22 APIRET rc;
23 HMODULE hDLL;
24 char failreason[256];
25 char funcname[258];
Guido van Rossum22a1d361999-12-20 21:18:49 +000026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000027 rc = DosLoadModule(failreason,
28 sizeof(failreason),
29 pathname,
30 &hDLL);
Guido van Rossum22a1d361999-12-20 21:18:49 +000031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000032 if (rc != NO_ERROR) {
33 char errBuf[256];
34 PyOS_snprintf(errBuf, sizeof(errBuf),
35 "DLL load failed, rc = %d: %.200s",
36 rc, failreason);
37 PyErr_SetString(PyExc_ImportError, errBuf);
38 return NULL;
39 }
Guido van Rossum22a1d361999-12-20 21:18:49 +000040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000041 PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname);
42 rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
43 if (rc != NO_ERROR)
44 p = NULL; /* Signify Failure to Acquire Entrypoint */
45 return p;
Guido van Rossum22a1d361999-12-20 21:18:49 +000046}