]> granicus.if.org Git - php/commitdiff
Cleanup (replce hack by a clean implementation)
authorDmitry Stogov <dmitry@zend.com>
Wed, 1 Jul 2015 14:30:00 +0000 (17:30 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 1 Jul 2015 14:30:00 +0000 (17:30 +0300)
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_fe.c
ext/mysqli/mysqli_fe.h
ext/mysqli/mysqli_nonapi.c
ext/mysqli/mysqli_priv.h

index 95bcd9978cfc43403608324c0e676b03ec4c0341..8eae59b0c1da4b361df3ed61242f81ec7b8c357c 100644 (file)
@@ -1479,19 +1479,12 @@ PHP_FUNCTION(mysqli_info)
 /* }}} */
 
 /* {{{ php_mysqli_init() */
-void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_method)
 {
        MYSQLI_RESOURCE *mysqli_resource;
        MY_MYSQL *mysql;
 
-// TODO: We can't properly check if this was to mysql_init() in a class method
-//       or a call to mysqli->init().
-//       To solve the problem, we added instanceof check for the class of $this
-//       ???
-       if (getThis() &&
-           instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry) &&
-           (Z_MYSQLI_P(getThis()))->ptr) {
-//???  if (getThis() && (Z_MYSQLI_P(getThis()))->ptr) {
+       if (is_method && (Z_MYSQLI_P(getThis()))->ptr) {
                return;
        }
 
@@ -1515,7 +1508,7 @@ void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
        mysqli_resource->ptr = (void *)mysql;
        mysqli_resource->status = MYSQLI_STATUS_INITIALIZED;
 
-       if (!getThis() || !instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry)) {
+       if (!is_method) {
                MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
        } else {
                (Z_MYSQLI_P(getThis()))->ptr = mysqli_resource;
@@ -1527,7 +1520,15 @@ void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
    Initialize mysqli and return a resource for use with mysql_real_connect */
 PHP_FUNCTION(mysqli_init)
 {
-       php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+       php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE);
+}
+/* }}} */
+
+/* {{{ proto resource mysqli::init(void)
+   Initialize mysqli and return a resource for use with mysql_real_connect */
+PHP_FUNCTION(mysqli_init_method)
+{
+       php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE);
 }
 /* }}} */
 
index cacda52da08677e935217dfb2f92be3c0ce421b0..f69491f825f614c1b1893ae44c386bdbb6dc4f7a 100644 (file)
@@ -548,7 +548,7 @@ const zend_function_entry mysqli_link_methods[] = {
 #endif
        PHP_FALIAS(get_server_info, mysqli_get_server_info, arginfo_mysqli_no_params)
        PHP_FALIAS(get_warnings, mysqli_get_warnings, arginfo_mysqli_no_params)
-       PHP_FALIAS(init,mysqli_init, arginfo_mysqli_no_params)
+       PHP_FALIAS(init,mysqli_init_method, arginfo_mysqli_no_params)
        PHP_FALIAS(kill,mysqli_kill, arginfo_class_mysqli_kill)
        PHP_FALIAS(multi_query, mysqli_multi_query, arginfo_class_mysqli_query)
        PHP_FALIAS(mysqli, mysqli_link_construct, arginfo_mysqli_connect)
index d55a3c4ec7492e12baca28c01a7963e46d986609..4710bb128f0e68f0b6f95625cf5a5306127b16ec 100644 (file)
@@ -68,6 +68,7 @@ PHP_FUNCTION(mysqli_get_warnings);
 PHP_FUNCTION(mysqli_info);
 PHP_FUNCTION(mysqli_insert_id);
 PHP_FUNCTION(mysqli_init);
+PHP_FUNCTION(mysqli_init_method);
 PHP_FUNCTION(mysqli_kill);
 PHP_FUNCTION(mysqli_link_construct);
 PHP_FUNCTION(mysqli_set_local_infile_default);
index 99e7006b1af91163e351ff028adc358906d73101..36368755de5759e5817b25a287e79bfb7f2262bc 100644 (file)
@@ -81,7 +81,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
 #endif
 
        if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
-               php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+               php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, in_ctor);
                return;
        }
        hostname = username = dbname = passwd = socket = NULL;
index aa8b14a7cd2f699c451b18989e6f03d4087c183f..2f994fb12cc67a7e9bc972afd8327f3957890dbc 100644 (file)
@@ -146,6 +146,6 @@ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_stmt_errno(stmt)) { \
 
 void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor);
 
-void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS);
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_method);
 
 #endif /* MYSQLI_PRIV_H */