diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd_plugin.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd_plugin.c | 75 |
1 files changed, 33 insertions, 42 deletions
diff --git a/ext/mysqlnd/mysqlnd_plugin.c b/ext/mysqlnd/mysqlnd_plugin.c index bd6d259270..487bd8485c 100644 --- a/ext/mysqlnd/mysqlnd_plugin.c +++ b/ext/mysqlnd/mysqlnd_plugin.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2016 The PHP Group | +----------------------------------------------------------------------+ @@ -12,13 +12,12 @@ | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ - | Authors: Andrey Hristov <andrey@mysql.com> | - | Ulf Wendel <uwendel@mysql.com> | - | Georg Richter <georg@mysql.com> | + | Authors: Andrey Hristov <andrey@php.net> | + | Ulf Wendel <uw@php.net> | + | Georg Richter <georg@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd.c 306407 2010-12-16 12:56:19Z andrey $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" @@ -27,7 +26,7 @@ /*--------------------------------------------------------------------*/ #if defined(MYSQLND_DBG_ENABLED) && MYSQLND_DBG_ENABLED == 1 -static enum_func_status mysqlnd_example_plugin_end(void * p TSRMLS_DC); +static enum_func_status mysqlnd_example_plugin_end(void * p); static MYSQLND_STATS * mysqlnd_plugin_example_stats = NULL; @@ -66,12 +65,12 @@ static struct st_mysqlnd_typeii_plugin_example mysqlnd_example_plugin = /* {{{ mysqlnd_example_plugin_end */ -static -enum_func_status mysqlnd_example_plugin_end(void * p TSRMLS_DC) +static +enum_func_status mysqlnd_example_plugin_end(void * p) { struct st_mysqlnd_typeii_plugin_example * plugin = (struct st_mysqlnd_typeii_plugin_example *) p; DBG_ENTER("mysqlnd_example_plugin_end"); - mysqlnd_stats_end(plugin->plugin_header.plugin_stats.values); + mysqlnd_stats_end(plugin->plugin_header.plugin_stats.values, 1); plugin->plugin_header.plugin_stats.values = NULL; DBG_RETURN(PASS); } @@ -80,24 +79,24 @@ enum_func_status mysqlnd_example_plugin_end(void * p TSRMLS_DC) /* {{{ mysqlnd_example_plugin_register */ void -mysqlnd_example_plugin_register(TSRMLS_D) +mysqlnd_example_plugin_register(void) { - mysqlnd_stats_init(&mysqlnd_plugin_example_stats, EXAMPLE_STAT_LAST); + mysqlnd_stats_init(&mysqlnd_plugin_example_stats, EXAMPLE_STAT_LAST, 1); mysqlnd_example_plugin.plugin_header.plugin_stats.values = mysqlnd_plugin_example_stats; - mysqlnd_plugin_register_ex((struct st_mysqlnd_plugin_header *) &mysqlnd_example_plugin TSRMLS_CC); + mysqlnd_plugin_register_ex((struct st_mysqlnd_plugin_header *) &mysqlnd_example_plugin); } /* }}} */ #endif /* defined(MYSQLND_DBG_ENABLED) && MYSQLND_DBG_ENABLED == 1 */ /*--------------------------------------------------------------------*/ static HashTable mysqlnd_registered_plugins; - + static unsigned int mysqlnd_plugins_counter = 0; /* {{{ mysqlnd_plugin_subsystem_init */ void -mysqlnd_plugin_subsystem_init(TSRMLS_D) +mysqlnd_plugin_subsystem_init(void) { zend_hash_init(&mysqlnd_registered_plugins, 4 /* initial hash size */, NULL /* hash_func */, NULL /* dtor */, TRUE /* pers */); } @@ -106,11 +105,11 @@ mysqlnd_plugin_subsystem_init(TSRMLS_D) /* {{{ mysqlnd_plugin_end_apply_func */ int -mysqlnd_plugin_end_apply_func(void *pDest TSRMLS_DC) +mysqlnd_plugin_end_apply_func(zval *el) { - struct st_mysqlnd_plugin_header * plugin_header = *(struct st_mysqlnd_plugin_header **) pDest; + struct st_mysqlnd_plugin_header * plugin_header = (struct st_mysqlnd_plugin_header *)Z_PTR_P(el); if (plugin_header->m.plugin_shutdown) { - plugin_header->m.plugin_shutdown(plugin_header TSRMLS_CC); + plugin_header->m.plugin_shutdown(plugin_header); } return ZEND_HASH_APPLY_REMOVE; } @@ -119,9 +118,9 @@ mysqlnd_plugin_end_apply_func(void *pDest TSRMLS_DC) /* {{{ mysqlnd_plugin_subsystem_end */ void -mysqlnd_plugin_subsystem_end(TSRMLS_D) +mysqlnd_plugin_subsystem_end(void) { - zend_hash_apply(&mysqlnd_registered_plugins, mysqlnd_plugin_end_apply_func TSRMLS_CC); + zend_hash_apply(&mysqlnd_registered_plugins, mysqlnd_plugin_end_apply_func); zend_hash_destroy(&mysqlnd_registered_plugins); } /* }}} */ @@ -130,20 +129,19 @@ mysqlnd_plugin_subsystem_end(TSRMLS_D) /* {{{ mysqlnd_plugin_register */ PHPAPI unsigned int mysqlnd_plugin_register() { - TSRMLS_FETCH(); - return mysqlnd_plugin_register_ex(NULL TSRMLS_CC); + return mysqlnd_plugin_register_ex(NULL); } /* }}} */ /* {{{ mysqlnd_plugin_register_ex */ -PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin TSRMLS_DC) +PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin) { if (plugin) { if (plugin->plugin_api_version == MYSQLND_PLUGIN_API_VERSION) { - zend_hash_update(&mysqlnd_registered_plugins, plugin->plugin_name, strlen(plugin->plugin_name) + 1, &plugin, sizeof(void *), NULL); + zend_hash_str_update_ptr(&mysqlnd_registered_plugins, plugin->plugin_name, strlen(plugin->plugin_name), plugin); } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Plugin API version mismatch while loading plugin %s. Expected %d, got %d", + php_error_docref(NULL, E_WARNING, "Plugin API version mismatch while loading plugin %s. Expected %d, got %d", plugin->plugin_name, MYSQLND_PLUGIN_API_VERSION, plugin->plugin_api_version); return 0xCAFE; } @@ -154,39 +152,32 @@ PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * /* {{{ mysqlnd_plugin_find */ -PHPAPI void * _mysqlnd_plugin_find(const char * const name TSRMLS_DC) +PHPAPI void * mysqlnd_plugin_find(const char * const name) { void * plugin; - if (SUCCESS == zend_hash_find(&mysqlnd_registered_plugins, name, strlen(name) + 1, (void **) &plugin)) { - return (void *)*(char **) plugin; + if ((plugin = zend_hash_str_find_ptr(&mysqlnd_registered_plugins, name, strlen(name))) != NULL) { + return plugin; } return NULL; - } /* }}} */ -/* {{{ _mysqlnd_plugin_apply_with_argument */ -PHPAPI void _mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument TSRMLS_DC) +/* {{{ mysqlnd_plugin_apply_with_argument */ +PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument) { - /* Note: We want to be thread-safe (read-only), so we can use neither - * zend_hash_apply_with_argument nor zend_hash_internal_pointer_reset and - * friends - */ - Bucket *p; - - p = mysqlnd_registered_plugins.pListHead; - while (p != NULL) { - int result = apply_func(p->pData, argument TSRMLS_CC); + zval *val; + int result; + ZEND_HASH_FOREACH_VAL(&mysqlnd_registered_plugins, val) { + result = apply_func(val, argument); if (result & ZEND_HASH_APPLY_REMOVE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "mysqlnd_plugin_apply_with_argument must not remove table entries"); + php_error_docref(NULL, E_WARNING, "mysqlnd_plugin_apply_with_argument must not remove table entries"); } - p = p->pListNext; if (result & ZEND_HASH_APPLY_STOP) { break; } - } + } ZEND_HASH_FOREACH_END(); } /* }}} */ |