diff options
author | Andrey Hristov <andrey@php.net> | 2011-10-31 11:46:24 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2011-10-31 11:46:24 +0000 |
commit | 8fb6bdd5b82fbfeb295f9a3d181a29606f7f670d (patch) | |
tree | 73a7516959ea1b8d464c7b816d407cff91d1ba16 /ext/mysqlnd/mysqlnd_driver.c | |
parent | 63812d1849fed668b773b781c957144221019033 (diff) | |
download | php-git-8fb6bdd5b82fbfeb295f9a3d181a29606f7f670d.tar.gz |
Split struct MYSQLND in struct MYSQLND and struct MYSQLD_CONN_DATA.
A step in the direction of keeping internal data private
Diffstat (limited to 'ext/mysqlnd/mysqlnd_driver.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd_driver.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c index e74a71fab4..1f33df1768 100644 --- a/ext/mysqlnd/mysqlnd_driver.c +++ b/ext/mysqlnd/mysqlnd_driver.c @@ -109,46 +109,56 @@ mysqlnd_error_list_pdtor(void * pDest) static MYSQLND * MYSQLND_METHOD(mysqlnd_object_factory, get_connection)(zend_bool persistent TSRMLS_DC) { - size_t alloc_size = sizeof(MYSQLND) + mysqlnd_plugin_count() * sizeof(void *); - MYSQLND * ret; + size_t alloc_size_ret = sizeof(MYSQLND) + mysqlnd_plugin_count() * sizeof(void *); + size_t alloc_size_ret_data = sizeof(MYSQLND_CONN_DATA) + mysqlnd_plugin_count() * sizeof(void *); + MYSQLND * new_object; + MYSQLND_CONN_DATA * data; DBG_ENTER("mysqlnd_driver::get_connection"); DBG_INF_FMT("persistent=%u", persistent); - ret = mnd_pecalloc(1, alloc_size, persistent); - if (!ret) { + new_object = mnd_pecalloc(1, alloc_size_ret, persistent); + if (!new_object) { DBG_RETURN(NULL); } + new_object->data = mnd_pecalloc(1, alloc_size_ret_data, persistent); + if (!new_object->data) { + mnd_pefree(new_object, persistent); + DBG_RETURN(NULL); + } + new_object->persistent = persistent; - ret->error_info = &(ret->error_info_impl); - ret->options = &(ret->options_impl); - ret->upsert_status = &(ret->upsert_status_impl); + data = new_object->data; - ret->persistent = persistent; - ret->m = mysqlnd_conn_get_methods(); - CONN_SET_STATE(ret, CONN_ALLOCED); - ret->m->get_reference(ret TSRMLS_CC); + data->error_info = &(data->error_info_impl); + data->options = &(data->options_impl); + data->upsert_status = &(data->upsert_status_impl); - if (PASS != ret->m->init(ret TSRMLS_CC)) { - ret->m->dtor(ret TSRMLS_CC); + data->persistent = persistent; + data->m = mysqlnd_conn_get_methods(); + CONN_SET_STATE(data, CONN_ALLOCED); + data->m->get_reference(data TSRMLS_CC); + + if (PASS != data->m->init(data TSRMLS_CC)) { + data->m->outter_dtor(new_object TSRMLS_CC); DBG_RETURN(NULL); } - ret->error_info->error_list = mnd_pecalloc(1, sizeof(zend_llist), persistent); - if (!ret->error_info->error_list) { - ret->m->dtor(ret TSRMLS_CC); + data->error_info->error_list = mnd_pecalloc(1, sizeof(zend_llist), persistent); + if (!data->error_info->error_list) { + data->m->outter_dtor(new_object TSRMLS_CC); DBG_RETURN(NULL); } else { - zend_llist_init(ret->error_info->error_list, sizeof(MYSQLND_ERROR_LIST_ELEMENT), (llist_dtor_func_t)mysqlnd_error_list_pdtor, persistent); + zend_llist_init(data->error_info->error_list, sizeof(MYSQLND_ERROR_LIST_ELEMENT), (llist_dtor_func_t)mysqlnd_error_list_pdtor, persistent); } - DBG_RETURN(ret); + DBG_RETURN(new_object); } /* }}} */ /* {{{ mysqlnd_object_factory::get_prepared_statement */ static MYSQLND_STMT * -MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND * const conn TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA * const conn TSRMLS_DC) { size_t alloc_size = sizeof(MYSQLND_STMT) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_STMT * ret = mnd_pecalloc(1, alloc_size, conn->persistent); |