]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/python/contrib/Python/dynload_hpux.c
Inital import
[l4.git] / l4 / pkg / python / contrib / Python / dynload_hpux.c
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         {SHLIB_EXT, "rb", C_EXTENSION},
18         {"module"SHLIB_EXT, "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 = 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                 PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",
43                               pathname);
44                 PyErr_SetString(PyExc_ImportError, buf);
45                 return NULL;
46         }
47         PyOS_snprintf(funcname, sizeof(funcname), FUNCNAME_PATTERN, shortname);
48         if (Py_VerboseFlag)
49                 printf("shl_findsym %s\n", funcname);
50         if (shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p) == -1) {
51                 shl_unload(lib);
52                 p = NULL;
53         }
54         if (p == NULL && Py_VerboseFlag)
55                 perror(funcname);
56
57         return p;
58 }