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
11const struct filedescr _PyImport_DynLoadFiletab[] = {
12    {".so", "rb", C_EXTENSION},
13    {"module.so", "rb", C_EXTENSION},
14    {0, 0}
15};
16
17dl_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