1 
2 /* Support for dynamic loading of extension modules */
3 
4 #include <atheos/image.h>
5 #include <errno.h>
6 
7 #include "Python.h"
8 #include "importdl.h"
9 
10 
11 const struct filedescr _PyImport_DynLoadFiletab[] = {
12     {".so", "rb", C_EXTENSION},
13     {"module.so", "rb", C_EXTENSION},
14     {0, 0}
15 };
16 
_PyImport_GetDynLoadFunc(const char * fqname,const char * shortname,const char * pathname,FILE * fp)17 dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
18                                     const char *pathname, FILE *fp)
19 {
20     void *p;
21     int lib;
22     char funcname[258];
23 
24     if (Py_VerboseFlag)
25         printf("load_library %s\n", pathname);
26 
27     lib = load_library(pathname, 0);
28     if (lib < 0) {
29         char buf[512];
30         if (Py_VerboseFlag)
31             perror(pathname);
32         PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s: %.200s",
33                       pathname, strerror(errno));
34         PyErr_SetString(PyExc_ImportError, buf);
35         return NULL;
36     }
37     PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname);
38     if (Py_VerboseFlag)
39         printf("get_symbol_address %s\n", funcname);
40     if (get_symbol_address(lib, funcname, -1, &p) < 0) {
41         p = NULL;
42         if (Py_VerboseFlag)
43             perror(funcname);
44     }
45 
46     return (dl_funcptr) p;
47 }
48