summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_plugin.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-06-17 17:50:54 +0800
committerXinchen Hui <laruence@php.net>2014-06-18 12:09:37 +0800
commit6288bb8ffefe9cf9648b8d2190729c087b5c2586 (patch)
tree39b7b4afb3b9b902e047b05b1af824161487f20e /ext/mysqlnd/mysqlnd_plugin.c
parentaccaaf9d6e15e57a64a054d7b5ebc0998ee510a4 (diff)
downloadphp-git-6288bb8ffefe9cf9648b8d2190729c087b5c2586.tar.gz
Refactoring mysqlnd (incompleted, only mysqlnd ext compilable)
Diffstat (limited to 'ext/mysqlnd/mysqlnd_plugin.c')
-rw-r--r--ext/mysqlnd/mysqlnd_plugin.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/ext/mysqlnd/mysqlnd_plugin.c b/ext/mysqlnd/mysqlnd_plugin.c
index 702d591c3e..2e8f11b6b8 100644
--- a/ext/mysqlnd/mysqlnd_plugin.c
+++ b/ext/mysqlnd/mysqlnd_plugin.c
@@ -106,9 +106,9 @@ 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 TSRMLS_DC)
{
- 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);
}
@@ -141,7 +141,7 @@ PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header *
{
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",
plugin->plugin_name, MYSQLND_PLUGIN_API_VERSION, plugin->plugin_api_version);
@@ -157,7 +157,7 @@ PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header *
PHPAPI void * _mysqlnd_plugin_find(const char * const name TSRMLS_DC)
{
void * plugin;
- if (SUCCESS == zend_hash_find(&mysqlnd_registered_plugins, name, strlen(name) + 1, (void **) &plugin)) {
+ if ((plugin = zend_hash_str_find_ptr(&mysqlnd_registered_plugins, name, strlen(name))) != NULL) {
return (void *)*(char **) plugin;
}
return NULL;
@@ -173,22 +173,18 @@ PHPAPI void _mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, voi
* zend_hash_apply_with_argument nor zend_hash_internal_pointer_reset and
* friends
*/
- uint idx;
- Bucket *p;
+ zval *val;
int result;
- for (idx = 0; idx < mysqlnd_registered_plugins.nNumUsed; idx++) {
- p = mysqlnd_registered_plugins.arData + idx;
- if (!p->xData) continue;
- result = apply_func(HASH_DATA(&mysqlnd_registered_plugins, p), argument TSRMLS_CC);
-
+ ZEND_HASH_FOREACH_VAL(&mysqlnd_registered_plugins, val) {
+ result = apply_func(val, argument TSRMLS_CC);
if (result & ZEND_HASH_APPLY_REMOVE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "mysqlnd_plugin_apply_with_argument must not remove table entries");
}
if (result & ZEND_HASH_APPLY_STOP) {
break;
}
- }
+ } ZEND_HASH_FOREACH_END();
}
/* }}} */