diff options
author | Xinchen Hui <laruence@gmail.com> | 2015-02-02 13:23:16 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2015-02-02 13:23:16 +0800 |
commit | 942809909e1bc125db038796c0a1a0b53eeaca7d (patch) | |
tree | bddec8b44878488fc73e8fe2fb9e30b7ee4f9b67 /ext/mysql/php_mysql.c | |
parent | c9e44dc2dfa7ad91fe9253378a49e9f5b057992e (diff) | |
download | php-git-942809909e1bc125db038796c0a1a0b53eeaca7d.tar.gz |
Cleanup resource handling APIs
Diffstat (limited to 'ext/mysql/php_mysql.c')
-rw-r--r-- | ext/mysql/php_mysql.c | 162 |
1 files changed, 116 insertions, 46 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index 2af92963f8..6495c1ec4c 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -543,9 +543,7 @@ static MYSQLND *mysql_convert_zv_to_mysqlnd(zval *zv) return NULL; } - mysql = zend_fetch_resource(zv, -1, "MySQL-Link", NULL, 2, le_link, le_plink); - - if (!mysql) { + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(zv), "MySQL-Link", NULL, le_link, le_plink))) { return NULL; } @@ -966,7 +964,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) #endif } } - ZEND_REGISTER_RESOURCE(return_value, mysql, le_plink); + ZVAL_RES(return_value, zend_register_resource(mysql, le_plink)); } else { /* non persistent */ zend_resource *index_ptr; zval new_index_ptr; @@ -1051,7 +1049,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) mysql_options(mysql->conn, MYSQL_OPT_LOCAL_INFILE, (char *)&MySG(allow_local_infile)); /* add it to the list */ - ZEND_REGISTER_RESOURCE(return_value, mysql, le_link); + ZVAL_RES(return_value, zend_register_resource(mysql, le_link)); /* add it to the hash */ ZVAL_NEW_RES(&new_index_ptr, -1, Z_RES_P(return_value), le_index_ptr); @@ -1111,9 +1109,13 @@ PHP_FUNCTION(mysql_close) } if (mysql_link) { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, NULL, MySG(default_link)? MySG(default_link)->handle : -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(MySG(default_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } res = mysql_link ? Z_RES_P(mysql_link) : MySG(default_link); @@ -1158,7 +1160,9 @@ PHP_FUNCTION(mysql_select_db) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } if (php_mysql_select_db(mysql, db)) { @@ -1199,7 +1203,9 @@ PHP_FUNCTION(mysql_get_host_info) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_STRING((char *)mysql_get_host_info(mysql->conn)); @@ -1222,7 +1228,9 @@ PHP_FUNCTION(mysql_get_proto_info) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_LONG(mysql_get_proto_info(mysql->conn)); @@ -1245,7 +1253,9 @@ PHP_FUNCTION(mysql_get_server_info) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_STRING((char *)mysql_get_server_info(mysql->conn)); @@ -1269,7 +1279,9 @@ PHP_FUNCTION(mysql_info) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } if ((str = (char *)mysql_info(mysql->conn))) { @@ -1296,7 +1308,9 @@ PHP_FUNCTION(mysql_thread_id) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_LONG((zend_long) mysql_thread_id(mysql->conn)); @@ -1325,7 +1339,9 @@ PHP_FUNCTION(mysql_stat) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } PHPMY_UNBUFFERED_QUERY_CHECK(); @@ -1358,7 +1374,9 @@ PHP_FUNCTION(mysql_client_encoding) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_STRING((char *)mysql_character_set_name(mysql->conn)); @@ -1385,7 +1403,9 @@ PHP_FUNCTION(mysql_set_charset) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } if (!mysql_set_character_set(mysql->conn, csname)) { @@ -1417,7 +1437,9 @@ PHP_FUNCTION(mysql_create_db) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } PHPMY_UNBUFFERED_QUERY_CHECK(); @@ -1448,10 +1470,12 @@ PHP_FUNCTION(mysql_drop_db) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } - if (mysql_drop_db(mysql->conn, db)==0) { + if (mysql_drop_db(mysql->conn, db) == 0) { RETURN_TRUE; } else { RETURN_FALSE; @@ -1542,7 +1566,8 @@ static void php_mysql_do_query_general(php_mysql_conn *mysql, char *query, int q } } MySG(result_allocated)++; - ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result)); + if (use_store == MYSQL_USE_RESULT) { mysql->active_result_res = Z_RES_P(return_value); Z_ADDREF_P(return_value); @@ -1568,7 +1593,9 @@ static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } php_mysql_do_query_general(mysql, query, query_len, NULL, use_store, return_value); @@ -1609,7 +1636,9 @@ PHP_FUNCTION(mysql_db_query) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } php_error_docref(NULL, E_DEPRECATED, "This function is deprecated; use mysql_query() instead"); @@ -1635,7 +1664,9 @@ PHP_FUNCTION(mysql_list_dbs) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } php_error_docref(NULL, E_DEPRECATED, "This function is deprecated; use mysql_query() with SHOW DATABASES instead"); @@ -1648,7 +1679,7 @@ PHP_FUNCTION(mysql_list_dbs) } MySG(result_allocated)++; - ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result)); } /* }}} */ @@ -1671,7 +1702,9 @@ PHP_FUNCTION(mysql_list_tables) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } if (!php_mysql_select_db(mysql, db)) { @@ -1685,7 +1718,7 @@ PHP_FUNCTION(mysql_list_tables) RETURN_FALSE; } MySG(result_allocated)++; - ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result)); } /* }}} */ @@ -1708,7 +1741,9 @@ PHP_FUNCTION(mysql_list_fields) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } if (!php_mysql_select_db(mysql, db)) { @@ -1722,7 +1757,7 @@ PHP_FUNCTION(mysql_list_fields) RETURN_FALSE; } MySG(result_allocated)++; - ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result)); } /* }}} */ @@ -1743,7 +1778,9 @@ PHP_FUNCTION(mysql_list_processes) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } PHPMY_UNBUFFERED_QUERY_CHECK(); @@ -1755,7 +1792,7 @@ PHP_FUNCTION(mysql_list_processes) } MySG(result_allocated)++; - ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result)); } /* }}} */ @@ -1780,7 +1817,9 @@ PHP_FUNCTION(mysql_error) } mysql = (php_mysql_conn*)MySG(default_link)->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_STRING((char *)mysql_error(mysql->conn)); @@ -1809,7 +1848,9 @@ PHP_FUNCTION(mysql_errno) } mysql = (php_mysql_conn*)MySG(default_link)->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } RETURN_LONG(mysql_errno(mysql->conn)); @@ -1833,7 +1874,9 @@ PHP_FUNCTION(mysql_affected_rows) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } /* conversion from int64 to long happing here */ @@ -1884,7 +1927,9 @@ PHP_FUNCTION(mysql_real_escape_string) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } /* assume worst case situation, which is 2x of the original string. @@ -1914,7 +1959,9 @@ PHP_FUNCTION(mysql_insert_id) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } /* conversion from int64 to long happing here */ @@ -1944,7 +1991,9 @@ Q: String or long first? return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES*)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (row < 0 || row >= (int)mysql_num_rows(mysql_result)) { php_error_docref(NULL, E_WARNING, "Unable to jump to row %pd on MySQL result index %d", row, Z_RES_P(result)->handle); @@ -2029,7 +2078,9 @@ PHP_FUNCTION(mysql_num_rows) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES*)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } /* conversion from int64 to long happing here */ RETURN_LONG((zend_long) mysql_num_rows(mysql_result)); @@ -2047,7 +2098,9 @@ PHP_FUNCTION(mysql_num_fields) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES*)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } RETURN_LONG(mysql_num_fields(mysql_result)); } @@ -2116,7 +2169,9 @@ static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ result_type = MYSQL_BOTH; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, res, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES*)zend_fetch_resource_ex(res, "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } #ifndef MYSQL_USE_MYSQLND if ((mysql_row = mysql_fetch_row(mysql_result)) == NULL || @@ -2274,7 +2329,9 @@ PHP_FUNCTION(mysql_data_seek) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (offset < 0 || offset >= (int)mysql_num_rows(mysql_result)) { php_error_docref(NULL, E_WARNING, "Offset %pd is invalid for MySQL result index %d (or the query data is unbuffered)", offset, Z_RES_P(result)->handle); @@ -2299,7 +2356,9 @@ PHP_FUNCTION(mysql_fetch_lengths) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES *)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if ((lengths=mysql_fetch_lengths(mysql_result))==NULL) { RETURN_FALSE; @@ -2402,7 +2461,9 @@ PHP_FUNCTION(mysql_fetch_field) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES *)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (ZEND_NUM_ARGS() > 1) { if (field<0 || field >= (int)mysql_num_fields(mysql_result)) { @@ -2447,7 +2508,10 @@ PHP_FUNCTION(mysql_field_seek) if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &result, &offset) == FAILURE) { return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + + if ((mysql_result = (MYSQL_RES *)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (offset < 0 || offset >= (int)mysql_num_fields(mysql_result)) { php_error_docref(NULL, E_WARNING, "Field %pd is invalid for MySQL result index %d", offset, Z_RES_P(result)->handle); @@ -2479,7 +2543,9 @@ static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES *)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (field < 0 || field >= (int)mysql_num_fields(mysql_result)) { php_error_docref(NULL, E_WARNING, "Field %pd is invalid for MySQL result index %d", field, Z_RES_P(result)->handle); @@ -2636,7 +2702,9 @@ PHP_FUNCTION(mysql_free_result) return; } - ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); + if ((mysql_result = (MYSQL_RES *)zend_fetch_resource(Z_RES_P(result), "MySQL result", le_result)) == NULL) { + RETURN_FALSE; + } zend_list_close(Z_RES_P(result)); RETURN_TRUE; @@ -2659,7 +2727,9 @@ PHP_FUNCTION(mysql_ping) CHECK_LINK(res); mysql = (php_mysql_conn*)res->ptr; } else { - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, -1, "MySQL-Link", le_link, le_plink); + if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), "MySQL-Link", NULL, le_link, le_plink))) { + RETURN_FALSE; + } } PHPMY_UNBUFFERED_QUERY_CHECK(); |