diff --git a/ext/posix/posix.c b/ext/posix/posix.c index ecbb849408723..2c87fbd28d981 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -23,6 +23,7 @@ #include "ext/standard/info.h" #include "ext/standard/php_string.h" #include "php_posix.h" +#include "main/php_network.h" #ifdef HAVE_POSIX @@ -417,7 +418,7 @@ PHP_FUNCTION(posix_ctermid) /* }}} */ /* Checks if the provides resource is a stream and if it provides a file descriptor */ -static int php_posix_stream_get_fd(zval *zfp, zend_long *fd) /* {{{ */ +static int php_posix_stream_get_fd(zval *zfp, zend_long *ret) /* {{{ */ { php_stream *stream; @@ -427,19 +428,21 @@ static int php_posix_stream_get_fd(zval *zfp, zend_long *fd) /* {{{ */ return 0; } - /* get the fd. + /* get the fd. php_socket_t is used for FDs, and is shorter than zend_long. * NB: Most other code will NOT use the PHP_STREAM_CAST_INTERNAL flag when casting. * It is only used here so that the buffered data warning is not displayed. */ + php_socket_t fd = -1; if (php_stream_can_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL) == SUCCESS) { - php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)fd, 0); + php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void**)&fd, 0); } else if (php_stream_can_cast(stream, PHP_STREAM_AS_FD | PHP_STREAM_CAST_INTERNAL) == SUCCESS) { - php_stream_cast(stream, PHP_STREAM_AS_FD | PHP_STREAM_CAST_INTERNAL, (void*)fd, 0); + php_stream_cast(stream, PHP_STREAM_AS_FD | PHP_STREAM_CAST_INTERNAL, (void**)&fd, 0); } else { php_error_docref(NULL, E_WARNING, "Could not use stream of type '%s'", stream->ops->label); return 0; } + *ret = fd; return 1; } /* }}} */