diff options
Diffstat (limited to 'macosx/tkMacOSXInit.c')
-rw-r--r-- | macosx/tkMacOSXInit.c | 65 |
1 files changed, 49 insertions, 16 deletions
diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index 06c1618..3cb3019 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXInit.c,v 1.15 2005/09/10 14:53:20 das Exp $ + * RCS: @(#) $Id: tkMacOSXInit.c,v 1.16 2005/11/27 02:36:15 das Exp $ */ #include "tkInt.h" @@ -170,9 +170,9 @@ TkpInit(interp) if (rsrc) { ReleaseResource(rsrc); } else { - struct mach_header *image; + const struct mach_header *image; char *data = NULL; - unsigned long size; + uint32_t size; int fd = -1; char fileName[L_tmpnam + 15]; int i, n; @@ -204,7 +204,7 @@ TkpInit(interp) if (fd == -1) break; fcntl(fd, F_SETFD, FD_CLOEXEC); if (write(fd, data, size) == -1) break; - err = FSPathMakeRef(fileName, &ref, NULL); + err = FSPathMakeRef((unsigned char*)fileName, &ref, NULL); if (err != noErr) break; err = FSOpenResourceFile(&ref, 0, NULL, fsRdPerm, &refNum); #ifdef TK_MAC_DEBUG @@ -295,22 +295,14 @@ TkpInit(interp) * Load the CPS SPI symbol dynamically, so that we don't break * if it every disappears or changes its name. */ - OSErr (*cpsEnableForegroundOperation)(ProcessSerialNumberPtr) = NULL; - NSSymbol nsSymbol; - if(NSIsSymbolNameDefinedWithHint( - "_CPSEnableForegroundOperation", "CoreGraphics")) { - nsSymbol = NSLookupAndBindSymbolWithHint( - "_CPSEnableForegroundOperation", "CoreGraphics"); - if(nsSymbol) { - cpsEnableForegroundOperation = NSAddressOfSymbol(nsSymbol); - } - } - if (cpsEnableForegroundOperation) { + TkMacOSXInitNamedSymbol(CoreGraphics, OSErr, \ + CPSEnableForegroundOperation, ProcessSerialNumberPtr); + if (CPSEnableForegroundOperation) { ProcessSerialNumber psn = { 0, kCurrentProcess }; /* * Let the window server know that we are a foregroundable app */ - cpsEnableForegroundOperation(&psn); + CPSEnableForegroundOperation(&psn); } } } @@ -452,3 +444,44 @@ TkMacOSXDefaultStartupScript(void) } } } + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetNamedSymbol -- + * + * + * Dynamically acquire address of a named symbol from a loaded + * dynamic library, so that we can use API that may not be + * available on all OS versions. + * If module is non-NULL and not the empty string, use twolevel + * namespace lookup. + * + * Results: + * Address of given symbol or NULL if unavailable. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +MODULE_SCOPE void* +TkMacOSXGetNamedSymbol(const char* module, const char* symbol) +{ + NSSymbol nsSymbol = NULL; + if (module && *module) { + if(NSIsSymbolNameDefinedWithHint(symbol, module)) { + nsSymbol = NSLookupAndBindSymbolWithHint(symbol, module); + } + } else { + if(NSIsSymbolNameDefined(symbol)) { + nsSymbol = NSLookupAndBindSymbol(symbol); + } + } + if(nsSymbol) { + return NSAddressOfSymbol(nsSymbol); + } else { + return NULL; + } +} |