cvs: ZendEngine2 / zend.h zend_extensions.c
| From: | Derick Rethans | 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 */