Changeset 391 for python/trunk/Python/dynload_next.c
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Python/dynload_next.c
r2 r391 10 10 11 11 const struct filedescr _PyImport_DynLoadFiletab[] = { 12 13 14 12 {".so", "rb", C_EXTENSION}, 13 {"module.so", "rb", C_EXTENSION}, 14 {0, 0} 15 15 }; 16 16 … … 30 30 #else 31 31 #define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW| \ 32 32 NSLINKMODULE_OPTION_RETURN_ON_ERROR|NSLINKMODULE_OPTION_PRIVATE 33 33 #endif 34 34 dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, 35 35 const char *pathname, FILE *fp) 36 36 { 37 38 39 40 41 42 43 44 37 dl_funcptr p = NULL; 38 char funcname[258]; 39 NSObjectFileImageReturnCode rc; 40 NSObjectFileImage image; 41 NSModule newModule; 42 NSSymbol theSym; 43 const char *errString; 44 char errBuf[512]; 45 45 46 46 PyOS_snprintf(funcname, sizeof(funcname), "_init%.200s", shortname); 47 47 48 48 #ifdef USE_DYLD_GLOBAL_NAMESPACE 49 50 51 52 53 49 if (NSIsSymbolNameDefined(funcname)) { 50 theSym = NSLookupAndBindSymbol(funcname); 51 p = (dl_funcptr)NSAddressOfSymbol(theSym); 52 return p; 53 } 54 54 #endif 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s", 84 85 86 87 88 89 90 91 55 rc = NSCreateObjectFileImageFromFile(pathname, &image); 56 switch(rc) { 57 default: 58 case NSObjectFileImageFailure: 59 case NSObjectFileImageFormat: 60 /* for these a message is printed on stderr by dyld */ 61 errString = "Can't create object file image"; 62 break; 63 case NSObjectFileImageSuccess: 64 errString = NULL; 65 break; 66 case NSObjectFileImageInappropriateFile: 67 errString = "Inappropriate file type for dynamic loading"; 68 break; 69 case NSObjectFileImageArch: 70 errString = "Wrong CPU type in object file"; 71 break; 72 case NSObjectFileImageAccess: 73 errString = "Can't read object file (no access)"; 74 break; 75 } 76 if (errString == NULL) { 77 newModule = NSLinkModule(image, pathname, LINKOPTIONS); 78 if (newModule == NULL) { 79 int errNo; 80 const char *fileName, *moreErrorStr; 81 NSLinkEditErrors c; 82 NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr ); 83 PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s", 84 fileName, moreErrorStr); 85 errString = errBuf; 86 } 87 } 88 if (errString != NULL) { 89 PyErr_SetString(PyExc_ImportError, errString); 90 return NULL; 91 } 92 92 #ifdef USE_DYLD_GLOBAL_NAMESPACE 93 94 95 96 97 98 99 100 101 93 if (!NSIsSymbolNameDefined(funcname)) { 94 /* UnlinkModule() isn't implemented in current versions, but calling it does no harm */ 95 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */ 96 PyErr_Format(PyExc_ImportError, 97 "Loaded module does not contain symbol %.200s", 98 funcname); 99 return NULL; 100 } 101 theSym = NSLookupAndBindSymbol(funcname); 102 102 #else 103 104 105 106 107 108 109 110 103 theSym = NSLookupSymbolInModule(newModule, funcname); 104 if ( theSym == NULL ) { 105 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */ 106 PyErr_Format(PyExc_ImportError, 107 "Loaded module does not contain symbol %.200s", 108 funcname); 109 return NULL; 110 } 111 111 #endif 112 113 112 p = (dl_funcptr)NSAddressOfSymbol(theSym); 113 return p; 114 114 }
Note:
See TracChangeset
for help on using the changeset viewer.