diff options
Diffstat (limited to 'Zend/zend_extensions.c')
| -rw-r--r-- | Zend/zend_extensions.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index 2509daf318..4d4b1ffe09 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -18,13 +18,14 @@ */ #include "zend_extensions.h" +#include "zend_system_id.h" ZEND_API zend_llist zend_extensions; ZEND_API uint32_t zend_extension_flags = 0; ZEND_API int zend_op_array_extension_handles = 0; static int last_resource_number; -int zend_load_extension(const char *path) +zend_result zend_load_extension(const char *path) { #if ZEND_EXTENSIONS_SUPPORT DL_HANDLE handle; @@ -40,6 +41,13 @@ int zend_load_extension(const char *path) #endif return FAILURE; } +#ifdef ZEND_WIN32 + char *err; + if (!php_win32_image_compatible(handle, &err)) { + zend_error(E_CORE_WARNING, err); + return FAILURE; + } +#endif return zend_load_extension_handle(handle, path); #else fprintf(stderr, "Extensions are not supported on this platform.\n"); @@ -51,7 +59,7 @@ int zend_load_extension(const char *path) #endif } -int zend_load_extension_handle(DL_HANDLE handle, const char *path) +zend_result zend_load_extension_handle(DL_HANDLE handle, const char *path) { #if ZEND_EXTENSIONS_SUPPORT zend_extension *new_extension; @@ -126,7 +134,8 @@ int zend_load_extension_handle(DL_HANDLE handle, const char *path) return FAILURE; } - return zend_register_extension(new_extension, handle); + zend_register_extension(new_extension, handle); + return SUCCESS; #else fprintf(stderr, "Extensions are not supported on this platform.\n"); /* See http://support.microsoft.com/kb/190351 */ @@ -138,7 +147,7 @@ int zend_load_extension_handle(DL_HANDLE handle, const char *path) } -int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle) +void zend_register_extension(zend_extension *new_extension, DL_HANDLE handle) { #if ZEND_EXTENSIONS_SUPPORT zend_extension extension; @@ -167,8 +176,6 @@ int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle) } /*fprintf(stderr, "Loaded %s, version %s\n", extension.name, extension.version);*/ #endif - - return SUCCESS; } @@ -181,6 +188,7 @@ static void zend_extension_shutdown(zend_extension *extension) #endif } +/* int return due to zend linked list API */ static int zend_extension_startup(zend_extension *extension) { #if ZEND_EXTENSIONS_SUPPORT @@ -195,20 +203,18 @@ static int zend_extension_startup(zend_extension *extension) } -int zend_startup_extensions_mechanism() +void zend_startup_extensions_mechanism() { /* Startup extensions mechanism */ zend_llist_init(&zend_extensions, sizeof(zend_extension), (void (*)(void *)) zend_extension_dtor, 1); zend_op_array_extension_handles = 0; last_resource_number = 0; - return SUCCESS; } -int zend_startup_extensions() +void zend_startup_extensions() { zend_llist_apply_with_del(&zend_extensions, (int (*)(void *)) zend_extension_startup); - return SUCCESS; } @@ -249,18 +255,19 @@ ZEND_API void zend_extension_dispatch_message(int message, void *arg) } -ZEND_API int zend_get_resource_handle(zend_extension *extension) +ZEND_API int zend_get_resource_handle(const char *module_name) { if (last_resource_number<ZEND_MAX_RESERVED_RESOURCES) { - extension->resource_number = last_resource_number; + zend_add_system_entropy(module_name, "zend_get_resource_handle", &last_resource_number, sizeof(int)); return last_resource_number++; } else { return -1; } } -ZEND_API int zend_get_op_array_extension_handle(void) +ZEND_API int zend_get_op_array_extension_handle(const char *module_name) { + zend_add_system_entropy(module_name, "zend_get_op_array_extension_handle", &zend_op_array_extension_handles, sizeof(int)); return zend_op_array_extension_handles++; } |
