home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / Python2 / Python20_source / Python / dynload_hpux.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-10-25  |  1.3 KB  |  55 lines

  1.  
  2. /* Support for dynamic loading of extension modules */
  3.  
  4. #include "dl.h"
  5. #include <errno.h>
  6.  
  7. #include "Python.h"
  8. #include "importdl.h"
  9.  
  10. #if defined(__hp9000s300)
  11. #define FUNCNAME_PATTERN "_init%.200s"
  12. #else
  13. #define FUNCNAME_PATTERN "init%.200s"
  14. #endif
  15.  
  16. const struct filedescr _PyImport_DynLoadFiletab[] = {
  17.     {".sl", "rb", C_EXTENSION},
  18.     {"module.sl", "rb", C_EXTENSION},
  19.     {0, 0}
  20. };
  21.  
  22. dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
  23.                     const char *pathname, FILE *fp)
  24. {
  25.     dl_funcptr p;
  26.     shl_t lib;
  27.     int flags;
  28.     char funcname[258];
  29.  
  30.     flags = BIND_FIRST | BIND_DEFERRED;
  31.     if (Py_VerboseFlag) {
  32.         flags = DYNAMIC_PATH | BIND_FIRST | BIND_IMMEDIATE |
  33.             BIND_NONFATAL | BIND_VERBOSE;
  34.         printf("shl_load %s\n",pathname);
  35.     }
  36.     lib = shl_load(pathname, flags, 0);
  37.     /* XXX Chuck Blake once wrote that 0 should be BIND_NOSTART? */
  38.     if (lib == NULL) {
  39.         char buf[256];
  40.         if (Py_VerboseFlag)
  41.             perror(pathname);
  42.         sprintf(buf, "Failed to load %.200s", pathname);
  43.         PyErr_SetString(PyExc_ImportError, buf);
  44.         return NULL;
  45.     }
  46.     sprintf(funcname, FUNCNAME_PATTERN, shortname);
  47.     if (Py_VerboseFlag)
  48.         printf("shl_findsym %s\n", funcname);
  49.     shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p);
  50.     if (p == NULL && Py_VerboseFlag)
  51.         perror(funcname);
  52.  
  53.     return p;
  54. }
  55.