dll.c revision e0e0c19eefceaf5d4ec40f9466b58a771f50e799
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync/* Copyright (c) 2001, Stanford University
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * All rights reserved
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * See the file LICENSE.txt for information on redistributing this software.
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync#if defined(IRIX) || defined(IRIX64) || defined(Linux) || defined(FreeBSD) || defined(AIX) || defined(DARWIN) || defined(SunOS) || defined(OSF1)
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncCFBundleRef LoadFramework( const char *frameworkName ) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync /* load a system framework */
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync /* XXX \todo should this folder be retrieved from somewhere else? */
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync crStrcpy( fullfile, "/System/Library/Frameworks/" );
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync /* load any framework */
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync bundleURL = CFURLCreateWithString( NULL, CFStringCreateWithCStringNoCopy(NULL, fullfile, CFStringGetSystemEncoding(), NULL), NULL );
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync __frameworkErr = "Could not create OpenGL Framework bundle URL";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync bundle = CFBundleCreate( kCFAllocatorDefault, bundleURL );
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync __frameworkErr = "Could not create OpenGL Framework bundle";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync __frameworkErr = "Could not load MachO executable";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync /* default to a chromium bundle */
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync switch( NSCreateObjectFileImageFromFile(_filename, &fileImage) ) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync __bundleErr = "NSObjectFileImageFailure: Failure.";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync __bundleErr = "NSObjectFileImageInappropriateFile: The specified file is not of a valid type.";
case NSObjectFileImageArch:
case NSObjectFileImageFormat:
case NSObjectFileImageAccess:
case NSObjectFileImageSuccess:
if( !handle ) {
const char *name;
return handle;
#define NS_ADD 0
return CR_DLL_FRAMEWORK;
return CR_DLL_BUNDLE;
return CR_DLL_DYLIB;
return CR_DLL_DYLIB;
char *dll_err;
#if defined(WINDOWS)
(void) resolveGlobal;
case CR_DLL_FRAMEWORK:
case CR_DLL_BUNDLE:
case CR_DLL_DYLIB:
#if NS_ADD
if( resolveGlobal )
#elif defined(IRIX) || defined(IRIX64) || defined(Linux) || defined(FreeBSD) || defined(AIX) || defined(SunOS) || defined(OSF1)
if (resolveGlobal)
if (dll_err)
return dll;
#if defined(WINDOWS)
return (CRDLLFunc) CFBundleGetFunctionPointerForName( (CFBundleRef) dll->hinstLib, CFStringCreateWithCStringNoCopy(NULL, symname, CFStringGetSystemEncoding(), NULL) );
#if NS_ADD
nssym = NSLookupSymbolInImage( dll->hinstLib, symname, NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR );
if( !nssym ) {
#elif defined(IRIX) || defined(IRIX64) || defined(Linux) || defined(FreeBSD) || defined(AIX) || defined(SunOS) || defined(OSF1)
if (!data)
return data;
int dll_err = 0;
if (!dll) return;
#if defined(WINDOWS)
case CR_DLL_FRAMEWORK:
case CR_DLL_DYLIB:
#if !NS_ADD
case CR_DLL_BUNDLE:
#elif defined(IRIX) || defined(IRIX64) || defined(Linux) || defined(FreeBSD) || defined(AIX) || defined(SunOS) || defined(OSF1)
if (dll_err)