|
|
|
@ -610,10 +610,7 @@ static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t |
|
|
|
zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS; |
|
|
|
zend_hash_move_forward(Z_ARRVAL_P(stream_array))) { |
|
|
|
|
|
|
|
/* Temporary int fd is needed for the STREAM data type on windows, passing this_fd directly to php_stream_cast() |
|
|
|
would eventually bring a wrong result on x64. php_stream_cast() casts to int internally, and this will leave |
|
|
|
the higher bits of a SOCKET variable uninitialized on systems with little endian. */ |
|
|
|
int tmp_fd; |
|
|
|
php_socket_t this_fd; |
|
|
|
|
|
|
|
php_stream_from_zval_no_verify(stream, elem); |
|
|
|
if (stream == NULL) { |
|
|
|
@ -624,9 +621,7 @@ static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t |
|
|
|
* when casting. It is only used here so that the buffered data warning |
|
|
|
* is not displayed. |
|
|
|
* */ |
|
|
|
if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&tmp_fd, 1) && tmp_fd != -1) { |
|
|
|
|
|
|
|
php_socket_t this_fd = (php_socket_t)tmp_fd; |
|
|
|
if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd != -1) { |
|
|
|
|
|
|
|
PHP_SAFE_FD_SET(this_fd, fds); |
|
|
|
|
|
|
|
@ -660,10 +655,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC) |
|
|
|
char *key; |
|
|
|
uint key_len; |
|
|
|
ulong num_ind; |
|
|
|
/* Temporary int fd is needed for the STREAM data type on windows, passing this_fd directly to php_stream_cast() |
|
|
|
would eventually bring a wrong result on x64. php_stream_cast() casts to int internally, and this will leave |
|
|
|
the higher bits of a SOCKET variable uninitialized on systems with little endian. */ |
|
|
|
int tmp_fd; |
|
|
|
php_socket_t this_fd; |
|
|
|
|
|
|
|
|
|
|
|
type = zend_hash_get_current_key_ex(Z_ARRVAL_P(stream_array), |
|
|
|
@ -682,10 +674,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC) |
|
|
|
* when casting. It is only used here so that the buffered data warning |
|
|
|
* is not displayed. |
|
|
|
*/ |
|
|
|
if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&tmp_fd, 1) && tmp_fd != -1) { |
|
|
|
|
|
|
|
php_socket_t this_fd = (php_socket_t)tmp_fd; |
|
|
|
|
|
|
|
if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd != SOCK_ERR) { |
|
|
|
if (PHP_SAFE_FD_ISSET(this_fd, fds)) { |
|
|
|
if (type == HASH_KEY_IS_LONG) { |
|
|
|
zend_hash_index_update(new_hash, num_ind, (void *)elem, sizeof(zval *), (void **)&dest_elem); |
|
|
|
|