/* Support for dynamic loading of extension modules */

#include <atheos/image.h>
#include <errno.h>

#include "Python.h"
#include "importdl.h"


const struct filedescr _PyImport_DynLoadFiletab[] = {
       {".so", "rb", C_EXTENSION},
       {"module.so", "rb", C_EXTENSION},
       {0, 0}
};

dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
                                   const char *pathname, FILE *fp)
{
       void *p;
       int lib;
       char funcname[258];

       if (Py_VerboseFlag)
               printf("load_library %s\n", pathname);

       lib = load_library(pathname, 0);
       if (lib < 0) {
               char buf[512];
               if (Py_VerboseFlag)
                       perror(pathname);
               PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s: %.200s",
                             pathname, strerror(errno));
               PyErr_SetString(PyExc_ImportError, buf);
               return NULL;
       }
       PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname);
       if (Py_VerboseFlag)
               printf("get_symbol_address %s\n", funcname);
       if (get_symbol_address(lib, funcname, -1, &p) < 0) {
               p = NULL;
               if (Py_VerboseFlag)
                       perror(funcname);
       }

       return (dl_funcptr) p;
}