cvs: ZendEngine2 / zend.h zend_extensions.c

From: Date: Thu, 18 Jul 2002 11:16:35 +0000
Subject: cvs: ZendEngine2 / zend.h zend_extensions.c
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-268@lists.php.net to get a copy of this message
derick Thu Jul 18 07:16:35 2002 EDT Modified files: /ZendEngine2 zend.h zend_extensions.c Log: - MFZE1 - MacOSX fixes by Marko Karppinen Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.176 ZendEngine2/zend.h:1.177 --- ZendEngine2/zend.h:1.176 Mon Jul 15 14:09:56 2002 +++ ZendEngine2/zend.h Thu Jul 18 07:16:34 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.176 2002/07/15 18:09:56 andi Exp $ */ +/* $Id: zend.h,v 1.177 2002/07/18 11:16:34 derick Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -79,6 +79,17 @@ #ifdef HAVE_DLFCN_H # include <dlfcn.h> #endif + +#if HAVE_MACH_O_DYLD_H +#include <mach-o/dyld.h> + +/* MH_BUNDLE loading functions for Mac OS X / Darwin */ +void *zend_mh_bundle_load (char* bundle_path); +int zend_mh_bundle_unload (void *bundle_handle); +void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name); +const char *zend_mh_bundle_error(void); + +#endif /* HAVE_MACH_O_DYLD_H */ #if defined(HAVE_LIBDL) Index: ZendEngine2/zend_extensions.c diff -u ZendEngine2/zend_extensions.c:1.39 ZendEngine2/zend_extensions.c:1.40 --- ZendEngine2/zend_extensions.c:1.39 Sun Jan 6 10:21:35 2002 +++ ZendEngine2/zend_extensions.c Thu Jul 18 07:16:34 2002 @@ -216,3 +216,64 @@ } return NULL; } + +/* + * Support for dynamic loading of MH_BUNDLEs on Darwin / Mac OS X + * + */ + +#if HAVE_MACH_O_DYLD_H + +void *zend_mh_bundle_load(char* bundle_path) +{ + NSObjectFileImage bundle_image; + NSModule bundle_handle; + NSSymbol bundle_init_nssymbol; + void (*bundle_init)(void); + + if (NSCreateObjectFileImageFromFile(bundle_path, &bundle_image) != NSObjectFileImageSuccess) { + return NULL; + } + + bundle_handle = NSLinkModule(bundle_image, bundle_path, NSLINKMODULE_OPTION_PRIVATE); + NSDestroyObjectFileImage(bundle_image); + + /* call the init function of the bundle */ + bundle_init_nssymbol = NSLookupSymbolInModule(bundle_handle, "__init"); + if (bundle_init_nssymbol != NULL) { + bundle_init = NSAddressOfSymbol(bundle_init_nssymbol); + bundle_init(); + } + + return bundle_handle; +} + +int zend_mh_bundle_unload(void *bundle_handle) +{ + NSSymbol bundle_fini_nssymbol; + void (*bundle_fini)(void); + + /* call the fini function of the bundle */ + bundle_fini_nssymbol = NSLookupSymbolInModule(bundle_handle, "__fini"); + if (bundle_fini_nssymbol != NULL) { + bundle_fini = NSAddressOfSymbol(bundle_fini_nssymbol); + bundle_fini(); + } + + return (int) NSUnLinkModule(bundle_handle, NULL); +} + +void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name) +{ + NSSymbol symbol; + symbol = NSLookupSymbolInModule(bundle_handle, symbol_name); + return NSAddressOfSymbol(symbol); +} + +const char *zend_mh_bundle_error(void) +{ + /* Witness the state of the art error reporting */ + return NULL; +} + +#endif /* HAVE_MACH_O_DYLD_H */

« previous php.zend-engine.cvs (#268) next »