You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.2 KiB

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