diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 22:42:34 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 22:42:34 (GMT) |
commit | 4e0437307364e25f63b444923a21a57cb1ce2cab (patch) | |
tree | d32926ea9d1b9169742b7d93ae8ded425cbfd10b /Python/importdl.c | |
parent | f2038a3593432b4c154a0b6743b6399f70503ce4 (diff) | |
download | cpython-4e0437307364e25f63b444923a21a57cb1ce2cab.zip cpython-4e0437307364e25f63b444923a21a57cb1ce2cab.tar.gz cpython-4e0437307364e25f63b444923a21a57cb1ce2cab.tar.bz2 |
Added code to import dynamic modules using mac CFM.
Diffstat (limited to 'Python/importdl.c')
-rw-r--r-- | Python/importdl.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/Python/importdl.c b/Python/importdl.c index 00a033e..882402c 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -43,6 +43,7 @@ extern int verbose; /* Defined in pythonrun.c */ NT -- NT style dynamic linking (using DLLs) _DL_FUNCPTR_DEFINED -- if the typedef dl_funcptr has been defined WITH_MAC_DL -- Mac dynamic linking (highly experimental) + USE_MAC_SHARED_LIBRARY -- Another mac dynamic linking method SHORT_EXT -- short extension for dynamic module, e.g. ".so" LONG_EXT -- long extension, e.g. "module.so" hpux -- HP-UX Dynamic Linking - defined by the compiler @@ -98,6 +99,15 @@ typedef FARPROC dl_funcptr; #define DYNAMIC_LINK #endif +#ifdef USE_MAC_SHARED_LIBRARY +#define DYNAMIC_LINK +#define SHORT_EXT ".shlb" +#define LONG_EXT "module.shlb" +#ifndef _DL_FUNCPTR_DEFINED +typedef void (*dl_funcptr)(); +#endif +#endif + #if !defined(DYNAMIC_LINK) && defined(HAVE_DLFCN_H) && defined(HAVE_DLOPEN) #define DYNAMIC_LINK #define USE_SHLIB @@ -138,6 +148,13 @@ typedef void (*dl_funcptr)(); #include "dynamic_load.h" #endif +#ifdef USE_MAC_SHARED_LIBRARY +#include <CodeFragments.h> +#include <Files.h> +#include "macdefs.h" +#include "macglue.h" +#endif + #ifdef USE_RLD #include <mach-o/rld.h> #define FUNCNAME_PATTERN "_init%.200s" @@ -163,9 +180,9 @@ extern char *getprogramname(); #endif /* DYNAMIC_LINK */ -/* Max length of module suffix searched for -- accommodates "module.so" */ +/* Max length of module suffix searched for -- accommodates "module.shlb" */ #ifndef MAXSUFFIXSIZE -#define MAXSUFFIXSIZE 10 +#define MAXSUFFIXSIZE 12 #endif /* Pass it on to import.c */ @@ -203,6 +220,28 @@ load_dynamic_module(name, pathname) return NULL; } #else /* !WITH_MAC_DL */ +#ifdef USE_MAC_SHARED_LIBRARY + /* Another way to do dynloading on the mac, use CFM */ + { + FSSpec libspec; + CFragConnectionID connID; + Ptr mainAddr; + Str255 errMessage; + OSErr err; + + (void)FSMakeFSSpec(0, 0, Pstring(pathname), &libspec); + err = GetDiskFragment(&libspec, 0, 0, Pstring(name), kLoadCFrag, &connID, &mainAddr, + errMessage); + if ( err ) { + char buf[512]; + + sprintf(buf, "%#s: %s", errMessage, macstrerror(err)); + err_setstr(ImportError, buf); + return NULL; + } + p = (dl_funcptr)mainAddr; + } +#endif /* USE_MAC_SHARED_LIBRARY */ #ifdef USE_SHLIB { #ifdef RTLD_NOW |