blob: 0e1b907b8c23ff4367cc95a014bdfd3e7aee84eb [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
Brett Cannon2657df42012-05-04 15:20:40 -040012const char *_PyImport_DynLoadFiletab[] = {".pyd", ".dll", NULL};
Guido van Rossum22a1d361999-12-20 21:18:49 +000013
Victor Stinner42040fb2011-02-22 23:16:19 +000014dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000015 const char *pathname, FILE *fp)
Guido van Rossum22a1d361999-12-20 21:18:49 +000016{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000017 dl_funcptr p;
18 APIRET rc;
19 HMODULE hDLL;
20 char failreason[256];
21 char funcname[258];
Guido van Rossum22a1d361999-12-20 21:18:49 +000022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000023 rc = DosLoadModule(failreason,
24 sizeof(failreason),
25 pathname,
26 &hDLL);
Guido van Rossum22a1d361999-12-20 21:18:49 +000027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000028 if (rc != NO_ERROR) {
29 char errBuf[256];
30 PyOS_snprintf(errBuf, sizeof(errBuf),
31 "DLL load failed, rc = %d: %.200s",
32 rc, failreason);
33 PyErr_SetString(PyExc_ImportError, errBuf);
34 return NULL;
35 }
Guido van Rossum22a1d361999-12-20 21:18:49 +000036
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000037 PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname);
38 rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
39 if (rc != NO_ERROR)
40 p = NULL; /* Signify Failure to Acquire Entrypoint */
41 return p;
Guido van Rossum22a1d361999-12-20 21:18:49 +000042}