--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Python/dynload_next.c Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,114 @@
+
+/* Support for dynamic loading of extension modules on Mac OS X
+** All references to "NeXT" are for historical reasons.
+*/
+
+#include "Python.h"
+#include "importdl.h"
+
+#include <mach-o/dyld.h>
+
+const struct filedescr _PyImport_DynLoadFiletab[] = {
+ {".so", "rb", C_EXTENSION},
+ {"module.so", "rb", C_EXTENSION},
+ {0, 0}
+};
+
+/*
+** Python modules are Mach-O MH_BUNDLE files. The best way to load these
+** is each in a private namespace, so you can load, say, a module bar and a
+** module foo.bar. If we load everything in the global namespace the two
+** initbar() symbols will conflict.
+** However, it seems some extension packages depend upon being able to access
+** each others' global symbols. There seems to be no way to eat our cake and
+** have it, so the USE_DYLD_GLOBAL_NAMESPACE define determines which behaviour
+** you get.
+*/
+
+#ifdef USE_DYLD_GLOBAL_NAMESPACE
+#define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW|NSLINKMODULE_OPTION_RETURN_ON_ERROR
+#else
+#define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW| \
+ NSLINKMODULE_OPTION_RETURN_ON_ERROR|NSLINKMODULE_OPTION_PRIVATE
+#endif
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
+ const char *pathname, FILE *fp)
+{
+ dl_funcptr p = NULL;
+ char funcname[258];
+ NSObjectFileImageReturnCode rc;
+ NSObjectFileImage image;
+ NSModule newModule;
+ NSSymbol theSym;
+ const char *errString;
+ char errBuf[512];
+
+ PyOS_snprintf(funcname, sizeof(funcname), "_init%.200s", shortname);
+
+#ifdef USE_DYLD_GLOBAL_NAMESPACE
+ if (NSIsSymbolNameDefined(funcname)) {
+ theSym = NSLookupAndBindSymbol(funcname);
+ p = (dl_funcptr)NSAddressOfSymbol(theSym);
+ return p;
+ }
+#endif
+ rc = NSCreateObjectFileImageFromFile(pathname, &image);
+ switch(rc) {
+ default:
+ case NSObjectFileImageFailure:
+ case NSObjectFileImageFormat:
+ /* for these a message is printed on stderr by dyld */
+ errString = "Can't create object file image";
+ break;
+ case NSObjectFileImageSuccess:
+ errString = NULL;
+ break;
+ case NSObjectFileImageInappropriateFile:
+ errString = "Inappropriate file type for dynamic loading";
+ break;
+ case NSObjectFileImageArch:
+ errString = "Wrong CPU type in object file";
+ break;
+ case NSObjectFileImageAccess:
+ errString = "Can't read object file (no access)";
+ break;
+ }
+ if (errString == NULL) {
+ newModule = NSLinkModule(image, pathname, LINKOPTIONS);
+ if (newModule == NULL) {
+ int errNo;
+ const char *fileName, *moreErrorStr;
+ NSLinkEditErrors c;
+ NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr );
+ PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s",
+ fileName, moreErrorStr);
+ errString = errBuf;
+ }
+ }
+ if (errString != NULL) {
+ PyErr_SetString(PyExc_ImportError, errString);
+ return NULL;
+ }
+#ifdef USE_DYLD_GLOBAL_NAMESPACE
+ if (!NSIsSymbolNameDefined(funcname)) {
+ /* UnlinkModule() isn't implemented in current versions, but calling it does no harm */
+ /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
+ PyErr_Format(PyExc_ImportError,
+ "Loaded module does not contain symbol %.200s",
+ funcname);
+ return NULL;
+ }
+ theSym = NSLookupAndBindSymbol(funcname);
+#else
+ theSym = NSLookupSymbolInModule(newModule, funcname);
+ if ( theSym == NULL ) {
+ /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
+ PyErr_Format(PyExc_ImportError,
+ "Loaded module does not contain symbol %.200s",
+ funcname);
+ return NULL;
+ }
+#endif
+ p = (dl_funcptr)NSAddressOfSymbol(theSym);
+ return p;
+}