/Python/dynload_atheos.c

http://unladen-swallow.googlecode.com/ · C · 47 lines · 37 code · 9 blank · 1 comment · 6 complexity · 45ae123c986cb24530865209cf5b0044 MD5 · raw file

  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. }