]> granicus.if.org Git - php/commitdiff
api_ext to reverse_api
authorAndrey Hristov <andrey@php.net>
Wed, 19 Oct 2011 15:04:12 +0000 (15:04 +0000)
committerAndrey Hristov <andrey@php.net>
Wed, 19 Oct 2011 15:04:12 +0000 (15:04 +0000)
ext/mysql/php_mysql.c
ext/mysqli/mysqli.c
ext/mysqlnd/config.w32
ext/mysqlnd/config9.m4
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd.h
ext/mysqlnd/mysqlnd_reverse_api.c [new file with mode: 0644]
ext/mysqlnd/mysqlnd_reverse_api.h [new file with mode: 0644]
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/php_mysqlnd.c
ext/pdo_mysql/pdo_mysql.c

index 5a576248b5d051350b0c6419419a9978cc969a10..4af1936c7ca108307c7eb60e6121132e902313f7 100644 (file)
@@ -530,7 +530,7 @@ static PHP_GINIT_FUNCTION(mysql)
 /* }}} */
 
 #ifdef MYSQL_USE_MYSQLND
-static MYSQLND *mysql_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
+static MYSQLND * mysql_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC)
 {
        php_mysql_conn *mysql;
 
@@ -548,7 +548,7 @@ static MYSQLND *mysql_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
        return mysql->conn;
 }
 
-static mysqlnd_api_extension_t mysqlnd_api_ext = {
+static MYSQLND_REVERSE_API mysql_reverse_api = {
        &mysql_module_entry,
        mysql_convert_zv_to_mysqlnd
 };
@@ -583,7 +583,7 @@ ZEND_MODULE_STARTUP_D(mysql)
 #endif
 
 #ifdef MYSQL_USE_MYSQLND
-       mysqlnd_register_api_extension(&mysqlnd_api_ext);
+       mysqlnd_reverse_api_register_api(&mysql_reverse_api TSRMLS_CC);
 #endif
 
        return SUCCESS;
index c640968f7f915635c0d1fafbb50d9b01baac16d2..bbc4db9250355ebec78abad7d4997cef02cf1d57 100644 (file)
@@ -528,12 +528,12 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_
 /* }}} */
 
 #ifdef MYSQLI_USE_MYSQLND
-static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
+static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC)
 {
        if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJCE_P(zv) == mysqli_link_class_entry) {
-               MY_MYSQL *mysql;
-               MYSQLI_RESOURCE  *my_res;
-               mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(zv TSRMLS_CC);
+               MY_MYSQL * mysql;
+               MYSQLI_RESOURCE  * my_res;
+               mysqli_object * intern = (mysqli_object *)zend_object_store_get_object(zv TSRMLS_CC);
                if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {
                        /* We know that we have a mysqli object, so this failure should be emitted */
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);
@@ -545,7 +545,7 @@ static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
        return NULL;
 }
 
-static mysqlnd_api_extension_t mysqli_api_ext = {
+static MYSQLND_REVERSE_API mysqli_reverse_api = {
        &mysqli_module_entry,
        mysqli_convert_zv_to_mysqlnd
 };
@@ -839,7 +839,7 @@ PHP_MINIT_FUNCTION(mysqli)
 
 
 #ifdef MYSQLI_USE_MYSQLND
-       mysqlnd_register_api_extension(&mysqli_api_ext);
+       mysqlnd_reverse_api_register_api(&mysqli_reverse_api TSRMLS_CC);
 #endif
 
        return SUCCESS;
index 00cfade745ae5b8d57c843067cc9c1064725e0bf..78f2da83dcbf9a463efbd1da424ebfb08fee51de 100644 (file)
@@ -14,6 +14,7 @@ if (PHP_MYSQLND != "no") {
                        "mysqlnd_charset.c " +
                        "mysqlnd_debug.c " +
                        "mysqlnd_loaddata.c " +
+                       "mysqlnd_reverse_api.c " +
                        "mysqlnd_net.c " +
                        "mysqlnd_plugin.c " +
                        "mysqlnd_ps.c " +
index 1152dbce26972ba2539c314332107b07a7ba4dba..7ede3daffc200e62515f6b8bb9e107218b28b65b 100644 (file)
@@ -19,7 +19,7 @@ dnl If some extension uses mysqlnd it will get compiled in PHP core
 if test "$PHP_MYSQLND" != "no" || test "$PHP_MYSQLND_ENABLED" = "yes"; then
   mysqlnd_ps_sources="mysqlnd_ps.c mysqlnd_ps_codec.c"
   mysqlnd_base_sources="mysqlnd.c mysqlnd_alloc.c mysqlnd_bt.c mysqlnd_charset.c mysqlnd_wireprotocol.c \
-                   mysqlnd_loaddata.c mysqlnd_net.c \
+                   mysqlnd_loaddata.c mysqlnd_reverse_api.c mysqlnd_net.c \
                    mysqlnd_statistics.c mysqlnd_auth.c \
                                   mysqlnd_result.c mysqlnd_result_meta.c mysqlnd_debug.c\
                                   mysqlnd_block_alloc.c mysqlnd_plugin.c php_mysqlnd.c"
index 702f53a3a6f0836a9bad0879d9c690266e019f93..3a9b219a1c67876194d16ba81e32a18e2191880b 100644 (file)
@@ -27,6 +27,7 @@
 #include "mysqlnd_statistics.h"
 #include "mysqlnd_charset.h"
 #include "mysqlnd_debug.h"
+#include "mysqlnd_reverse_api.h"
 
 /*
   TODO :
@@ -68,8 +69,6 @@ static struct st_mysqlnd_conn_methods *mysqlnd_conn_methods;
 
 static struct st_mysqlnd_plugin_core mysqlnd_plugin_core;
 
-static HashTable mysqlnd_api_ext_ht;
-
 /* {{{ mysqlnd_error_list_pdtor */
 static void
 mysqlnd_error_list_pdtor(void * pDest)
@@ -93,7 +92,7 @@ PHPAPI void mysqlnd_library_end(TSRMLS_D)
                mysqlnd_stats_end(mysqlnd_global_stats);
                mysqlnd_global_stats = NULL;
                mysqlnd_library_initted = FALSE;
-               zend_hash_destroy(&mysqlnd_api_ext_ht);
+               mysqlnd_reverse_api_end(TSRMLS_C);
        }
 }
 /* }}} */
@@ -2547,45 +2546,11 @@ PHPAPI void mysqlnd_library_init(TSRMLS_D)
                mysqlnd_debug_trace_plugin_register(TSRMLS_C);
                mysqlnd_register_builtin_authentication_plugins(TSRMLS_C);
 
-               zend_hash_init(&mysqlnd_api_ext_ht, 3, NULL, NULL, 1);
+               mysqlnd_reverse_api_init(TSRMLS_C);
        }
 }
 /* }}} */
 
-/* {{{ myslqnd_get_api_extensions */
-PHPAPI HashTable *mysqlnd_get_api_extensions()
-{
-       return &mysqlnd_api_ext_ht;
-}
-/* }}} */
-
-/* {{{ mysqlnd_register_api_extension */
-PHPAPI void mysqlnd_register_api_extension(mysqlnd_api_extension_t *apiext)
-{
-       zend_hash_add(&mysqlnd_api_ext_ht, apiext->module->name, strlen(apiext->module->name)+1, &apiext, sizeof(mysqlnd_api_extension_t), NULL);
-}
-/* }}} */
-
-/* {{{ zval_to_mysqlnd */
-PHPAPI MYSQLND* zval_to_mysqlnd(zval *zv TSRMLS_DC)
-{
-       MYSQLND* retval;
-       mysqlnd_api_extension_t **elem;
-
-       for (zend_hash_internal_pointer_reset(&mysqlnd_api_ext_ht);
-                       zend_hash_get_current_data(&mysqlnd_api_ext_ht, (void **)&elem) == SUCCESS;
-                       zend_hash_move_forward(&mysqlnd_api_ext_ht)) {
-               if ((*elem)->conversion_cb) {
-                       retval = (*elem)->conversion_cb(zv TSRMLS_CC);
-                       if (retval) {
-                               return retval;
-                       }
-               }
-       }
-
-       return NULL;
-}
-/* }}} */
 
 /* {{{ mysqlnd_conn_get_methods */
 PHPAPI struct st_mysqlnd_conn_methods * mysqlnd_conn_get_methods()
index e4977e90cecb5f274876ca41b91a0988fdca75a4..2946765b48338e07c686957aa764e81babbc91d8 100644 (file)
@@ -313,15 +313,6 @@ PHPAPI ZEND_EXTERN_MODULE_GLOBALS(mysqlnd)
 
 PHPAPI void mysqlnd_minfo_print_hash(zval *values);
 
-typedef struct {
-       zend_module_entry *module;
-       MYSQLND *(*conversion_cb)(zval *zv TSRMLS_DC);
-} mysqlnd_api_extension_t;
-
-PHPAPI HashTable *mysqlnd_get_api_extensions();
-PHPAPI void mysqlnd_register_api_extension(mysqlnd_api_extension_t *apiext);
-PHPAPI MYSQLND* zval_to_mysqlnd(zval *zv TSRMLS_DC);
-
 #endif /* MYSQLND_H */
 
 
diff --git a/ext/mysqlnd/mysqlnd_reverse_api.c b/ext/mysqlnd/mysqlnd_reverse_api.c
new file mode 100644 (file)
index 0000000..8d0c551
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 5                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 2006-2011 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 3.01 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available through the world-wide-web at the following url:           |
+  | http://www.php.net/license/3_01.txt                                  |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | 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>                           |
+  |          Georg Richter <georg@mysql.com>                             |
+  |          Ulf Wendel <uwendel@mysql.com>                              |
+  +----------------------------------------------------------------------+
+*/
+
+/* $Id: mysqlnd.c 317989 2011-10-10 20:49:28Z andrey $ */
+#include "php.h"
+#include "mysqlnd.h"
+#include "mysqlnd_wireprotocol.h"
+#include "mysqlnd_priv.h"
+#include "mysqlnd_result.h"
+#include "mysqlnd_statistics.h"
+#include "mysqlnd_charset.h"
+#include "mysqlnd_debug.h"
+
+
+static HashTable mysqlnd_api_ext_ht;
+
+
+/* {{{ mysqlnd_reverse_api_init */
+PHPAPI void
+mysqlnd_reverse_api_init(TSRMLS_D)
+{
+       zend_hash_init(&mysqlnd_api_ext_ht, 3, NULL, NULL, 1);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_reverse_api_end */
+PHPAPI void
+mysqlnd_reverse_api_end(TSRMLS_D)
+{
+       zend_hash_destroy(&mysqlnd_api_ext_ht);
+}
+/* }}} */
+
+
+/* {{{ myslqnd_get_api_extensions */
+PHPAPI HashTable *
+mysqlnd_reverse_api_get_api_list(TSRLMLS_D)
+{
+       return &mysqlnd_api_ext_ht;
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_reverse_api_register_api */
+PHPAPI void
+mysqlnd_reverse_api_register_api(MYSQLND_REVERSE_API * apiext TSRMLS_DC)
+{
+       zend_hash_add(&mysqlnd_api_ext_ht, apiext->module->name, strlen(apiext->module->name) + 1, &apiext,
+                                 sizeof(MYSQLND_REVERSE_API), NULL);
+}
+/* }}} */
+
+
+/* {{{ zval_to_mysqlnd */
+PHPAPI MYSQLND *
+zval_to_mysqlnd(zval * zv TSRMLS_DC)
+{
+       MYSQLND * retval;
+       MYSQLND_REVERSE_API ** elem;
+
+       for (zend_hash_internal_pointer_reset(&mysqlnd_api_ext_ht);
+                zend_hash_get_current_data(&mysqlnd_api_ext_ht, (void **)&elem) == SUCCESS;
+                zend_hash_move_forward(&mysqlnd_api_ext_ht))
+       {
+               if ((*elem)->conversion_cb) {
+                       retval = (*elem)->conversion_cb(zv TSRMLS_CC);
+                       if (retval) {
+                               return retval;
+                       }
+               }
+       }
+
+       return NULL;
+}
+/* }}} */
+
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/mysqlnd/mysqlnd_reverse_api.h b/ext/mysqlnd/mysqlnd_reverse_api.h
new file mode 100644 (file)
index 0000000..9619e19
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 5                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 2006-2011 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 3.01 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available through the world-wide-web at the following url:           |
+  | http://www.php.net/license/3_01.txt                                  |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | 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>                           |
+  |          Georg Richter <georg@mysql.com>                             |
+  |          Ulf Wendel <uwendel@mysql.com>                              |
+  +----------------------------------------------------------------------+
+*/
+/* $Id: mysqlnd.h 318051 2011-10-12 16:18:02Z andrey $ */
+
+#ifndef MYSQLND_REVERSE_API_H
+#define MYSQLND_REVERSE_API_H
+struct st_mysqlnd_api_extension;
+
+PHPAPI void mysqlnd_reverse_api_init(TSRMLS_D);
+PHPAPI void mysqlnd_reverse_api_end(TSRMLS_D);
+
+PHPAPI HashTable * mysqlnd_reverse_api_get_api_list(TSRMLS_D);
+
+PHPAPI void mysqlnd_reverse_api_register_api(struct st_mysqlnd_api_extension * apiext TSRMLS_DC);
+
+PHPAPI MYSQLND * zval_to_mysqlnd(zval * zv TSRMLS_DC);
+
+#endif /* MYSQLND_REVERSE_API_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
+
index b74e8e56ebb4b7468bedce071dc522d7e05e80cb..dd7dced876757a7d1cccc771377b0ca0d72f095e 100644 (file)
@@ -1023,4 +1023,11 @@ struct st_mysqlnd_authentication_plugin
 };
 
 
+typedef struct st_mysqlnd_reverse_api
+{
+       zend_module_entry * module;
+       MYSQLND *(*conversion_cb)(zval * zv TSRMLS_DC);
+} MYSQLND_REVERSE_API;
+
+
 #endif /* MYSQLND_STRUCTS_H */
index 7147e6f4a7373c9436a1e7733ef04256487dbdd7..909532bd5cc8ad6d555238ef36f496961e148dbe 100644 (file)
@@ -25,6 +25,7 @@
 #include "mysqlnd_priv.h"
 #include "mysqlnd_debug.h"
 #include "mysqlnd_statistics.h"
+#include "mysqlnd_reverse_api.h"
 #include "ext/standard/info.h"
 #include "ext/standard/php_smart_str.h"
 
@@ -135,10 +136,10 @@ mysqlnd_minfo_dump_loaded_plugins(void *pDest, void * buf TSRMLS_DC)
 
 /* {{{ mysqlnd_minfo_dump_api_plugins */
 static int
-mysqlnd_minfo_dump_api_plugins(void *pDest, void * buf TSRMLS_DC)
+mysqlnd_minfo_dump_api_plugins(void * pDest, void * buf TSRMLS_DC)
 {
        smart_str * buffer = (smart_str *) buf;
-       mysqlnd_api_extension_t *ext = *(mysqlnd_api_extension_t **) pDest;
+       MYSQLND_REVERSE_API * ext = *(MYSQLND_REVERSE_API **) pDest;
        if (buffer->len) {
                smart_str_appendc(buffer, ',');
        }
@@ -188,7 +189,7 @@ PHP_MINFO_FUNCTION(mysqlnd)
                php_info_print_table_row(2, "Loaded plugins", tmp_str.c);
                smart_str_free(&tmp_str);
 
-               zend_hash_apply_with_argument(mysqlnd_get_api_extensions(), mysqlnd_minfo_dump_api_plugins, &tmp_str TSRMLS_CC);
+               zend_hash_apply_with_argument(mysqlnd_reverse_api_get_api_list(TSRMLS_C), mysqlnd_minfo_dump_api_plugins, &tmp_str TSRMLS_CC);
                smart_str_0(&tmp_str);
                php_info_print_table_row(2, "API Extensions", tmp_str.c);
                smart_str_free(&tmp_str);
index 7b77a1d680af64bf72e4ff256876aac5ec348b9c..b9fdc01f64002abf87e5db4a9947c088b454071f 100755 (executable)
@@ -48,10 +48,11 @@ ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql);
 #endif
 
 #ifdef PDO_USE_MYSQLND
-static MYSQLND *pdo_mysql_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
+#include "ext/mysqlnd/mysqlnd_reverse_api.h"
+static MYSQLND * pdo_mysql_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC)
 {
        if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJCE_P(zv) == php_pdo_get_dbh_ce()) {
-               pdo_dbh_t *dbh = zend_object_store_get_object(zv TSRMLS_CC);
+               pdo_dbh_t * dbh = zend_object_store_get_object(zv TSRMLS_CC);
 
                if (!dbh || dbh->driver != &pdo_mysql_driver) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Provided PDO instance is not using MySQL but %s", dbh->driver->driver_name);
@@ -63,7 +64,7 @@ static MYSQLND *pdo_mysql_convert_zv_to_mysqlnd(zval *zv TSRMLS_DC)
        return NULL;
 }
 
-static mysqlnd_api_extension_t pdo_mysql_api_ext = {
+static MYSQLND_REVERSE_API pdo_mysql_reverse_api = {
        &pdo_mysql_module_entry,
        pdo_mysql_convert_zv_to_mysqlnd
 };
@@ -109,7 +110,7 @@ static PHP_MINIT_FUNCTION(pdo_mysql)
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (long)PDO_MYSQL_ATTR_SSL_CIPHER);
 
 #ifdef PDO_USE_MYSQLND
-       mysqlnd_register_api_extension(&pdo_mysql_api_ext);
+       mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api TSRMLS_CC);
 #endif
 
        return php_pdo_register_driver(&pdo_mysql_driver);