From: Dmitry Stogov Date: Wed, 1 Jul 2015 14:30:00 +0000 (+0300) Subject: Cleanup (replce hack by a clean implementation) X-Git-Tag: php-7.1.0alpha3~25^2~79 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=819fd30cb3d4711c198ccf6ed7c06598f902675f;p=php Cleanup (replce hack by a clean implementation) --- diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 95bcd9978c..8eae59b0c1 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -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); } /* }}} */ diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index cacda52da0..f69491f825 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -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) diff --git a/ext/mysqli/mysqli_fe.h b/ext/mysqli/mysqli_fe.h index d55a3c4ec7..4710bb128f 100644 --- a/ext/mysqli/mysqli_fe.h +++ b/ext/mysqli/mysqli_fe.h @@ -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); diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 99e7006b1a..36368755de 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -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; diff --git a/ext/mysqli/mysqli_priv.h b/ext/mysqli/mysqli_priv.h index aa8b14a7cd..2f994fb12c 100644 --- a/ext/mysqli/mysqli_priv.h +++ b/ext/mysqli/mysqli_priv.h @@ -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 */