From: Andrey Hristov Date: Tue, 1 Dec 2015 11:52:36 +0000 (+0100) Subject: Add a method for checking if the underlying stream is valid. X-Git-Tag: php-7.1.0alpha1~705^2~27^2~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=139af35c2535668283a38283aab4907ebb03d2b5;p=php Add a method for checking if the underlying stream is valid. --- diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index bdcf29f7aa..095e26f7eb 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -318,7 +318,8 @@ typedef enum_func_status (*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, c typedef void (*func_mysqlnd_vio__close_stream)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef php_stream * (*func_mysqlnd_vio__open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef php_stream * (*func_mysqlnd_vio__get_stream)(const MYSQLND_VIO * const vio); -typedef php_stream * (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream); +typedef enum_func_status (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream); +typedef zend_bool (*func_mysqlnd_vio__has_valid_stream)(const MYSQLND_VIO * const vio); typedef func_mysqlnd_vio__open_stream (*func_mysqlnd_vio__get_open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_vio__set_client_option)(MYSQLND_VIO * const vio, enum_mysqlnd_client_option option, const char * const value); @@ -346,6 +347,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) func_mysqlnd_vio__get_stream get_stream; func_mysqlnd_vio__set_stream set_stream; + func_mysqlnd_vio__has_valid_stream has_valid_stream; func_mysqlnd_vio__get_open_stream get_open_stream; func_mysqlnd_vio__set_client_option set_client_option; diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c index f559ba6c0e..2b28cc6914 100644 --- a/ext/mysqlnd/mysqlnd_vio.c +++ b/ext/mysqlnd/mysqlnd_vio.c @@ -74,7 +74,7 @@ mysqlnd_set_sock_keepalive(php_stream * stream) /* {{{ mysqlnd_vio::network_read */ static enum_func_status MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, - MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) + MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) { enum_func_status return_value = PASS; php_stream * net_stream = vio->data->m.get_stream(vio); @@ -105,7 +105,7 @@ MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar * /* {{{ mysqlnd_vio::network_write */ static size_t MYSQLND_METHOD(mysqlnd_vio, network_write)(MYSQLND_VIO * const vio, const zend_uchar * const buffer, const size_t count, - MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) + MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) { size_t ret; DBG_ENTER("mysqlnd_vio::network_write"); @@ -318,8 +318,7 @@ MYSQLND_METHOD(mysqlnd_vio, connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTR open_stream = vio->data->m.get_open_stream(vio, scheme, error_info); if (open_stream) { php_stream * net_stream = open_stream(vio, scheme, persistent, conn_stats, error_info); - if (net_stream) { - (void) vio->data->m.set_stream(vio, net_stream); + if (net_stream && PASS == vio->data->m.set_stream(vio, net_stream)) { vio->data->m.post_connect_set_opt(vio, scheme, conn_stats, error_info); ret = PASS; } @@ -676,7 +675,7 @@ MYSQLND_METHOD(mysqlnd_vio, close_stream)(MYSQLND_VIO * const net, MYSQLND_STATS } else { php_stream_free(net_stream, PHP_STREAM_FREE_CLOSE); } - (void) net->data->m.set_stream(net, NULL); + net->data->m.set_stream(net, NULL); } DBG_VOID_RETURN; @@ -731,16 +730,26 @@ MYSQLND_METHOD(mysqlnd_vio, get_stream)(const MYSQLND_VIO * const net) /* {{{ mysqlnd_vio::set_stream */ -static php_stream * -MYSQLND_METHOD(mysqlnd_vio, set_stream)(MYSQLND_VIO * const net, php_stream * net_stream) +static enum_func_status +MYSQLND_METHOD(mysqlnd_vio, set_stream)(MYSQLND_VIO * const vio, php_stream * net_stream) { - php_stream * ret = NULL; DBG_ENTER("mysqlnd_vio::set_stream"); - if (net) { - net->data->stream = net_stream; - ret = net->data->stream; + if (vio) { + vio->data->stream = net_stream; + DBG_RETURN(PASS); } - DBG_RETURN(ret); + DBG_RETURN(FAIL); +} +/* }}} */ + + +/* {{{ mysqlnd_vio::has_valid_stream */ +static zend_bool +MYSQLND_METHOD(mysqlnd_vio, has_valid_stream)(const MYSQLND_VIO * const vio) +{ + DBG_ENTER("mysqlnd_vio::has_valid_stream"); + DBG_INF_FMT("%p %p", vio, vio? vio->data->stream:NULL); + DBG_RETURN((vio && vio->data->stream)? TRUE: FALSE); } /* }}} */ @@ -757,6 +766,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_vio) MYSQLND_METHOD(mysqlnd_vio, get_stream), MYSQLND_METHOD(mysqlnd_vio, set_stream), + MYSQLND_METHOD(mysqlnd_vio, has_valid_stream), MYSQLND_METHOD(mysqlnd_vio, get_open_stream), MYSQLND_METHOD(mysqlnd_vio, set_client_option),