Home | History | Annotate | Download | only in Python
      1 
      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 
     12 const struct filedescr _PyImport_DynLoadFiletab[] = {
     13     {".pyd", "rb", C_EXTENSION},
     14     {".dll", "rb", C_EXTENSION},
     15     {0, 0}
     16 };
     17 
     18 dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
     19                                     const char *pathname, FILE *fp)
     20 {
     21     dl_funcptr p;
     22     APIRET  rc;
     23     HMODULE hDLL;
     24     char failreason[256];
     25     char funcname[258];
     26 
     27     rc = DosLoadModule(failreason,
     28                        sizeof(failreason),
     29                        pathname,
     30                        &hDLL);
     31 
     32     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     }
     40 
     41     PyOS_snprintf(funcname, sizeof(funcname), "init%.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;
     46 }
     47