Skip to content

Commit

Permalink
Fix PHP8 build (ext/sockets compatibility) (#3684)
Browse files Browse the repository at this point in the history
  • Loading branch information
twose authored Sep 21, 2020
1 parent 7d4eaed commit 0a1ab3d
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 7 deletions.
14 changes: 13 additions & 1 deletion php_swoole.h
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,19 @@ static sw_inline void _sw_zend_bailout(const char *filename, uint32_t lineno)
(ptr) = &(val); \
} while (0)

#define SW_ZEND_REGISTER_RESOURCE(return_value, result, le_result) ZVAL_RES(return_value,zend_register_resource(result, le_result))
#if PHP_VERSION_ID < 80000
#define SW_ZVAL_SOCKET(return_value, result) \
ZVAL_RES(return_value,zend_register_resource((void *) (result), php_sockets_le_socket()))
#else
#define SW_ZVAL_SOCKET(return_value, result) \
ZVAL_OBJ(return_value, &result->std)
#endif

#if PHP_VERSION_ID < 80000
#define SW_Z_SOCKET_P(zsocket) (php_socket *) zend_fetch_resource_ex(zsocket, nullptr, php_sockets_le_socket())
#else
#define SW_Z_SOCKET_P(zsocket) Z_SOCKET_P(zsocket)
#endif

#ifndef ZVAL_IS_BOOL
static sw_inline zend_bool ZVAL_IS_BOOL(zval *v)
Expand Down
2 changes: 1 addition & 1 deletion swoole_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1244,7 +1244,7 @@ static PHP_METHOD(swoole_client, getSocket) {
if (!socket_object) {
RETURN_FALSE;
}
SW_ZEND_REGISTER_RESOURCE(return_value, (void *) socket_object, php_sockets_le_socket());
SW_ZVAL_SOCKET(return_value, socket_object);
zsocket = sw_zval_dup(return_value);
Z_TRY_ADDREF_P(zsocket);
php_swoole_client_set_zsocket(ZEND_THIS, zsocket);
Expand Down
14 changes: 11 additions & 3 deletions swoole_event.cc
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ int php_swoole_convert_to_fd(zval *zsocket) {
#ifdef SWOOLE_SOCKETS_SUPPORT
else {
php_socket *php_sock;
if ((php_sock = (php_socket *) zend_fetch_resource_ex(zsocket, nullptr, php_sockets_le_socket()))) {
if ((php_sock = SW_Z_SOCKET_P(zsocket))) {
fd = php_sock->bsd_socket;
return fd;
}
Expand Down Expand Up @@ -372,7 +372,7 @@ int php_swoole_convert_to_fd_ex(zval *zsocket, int *async) {
#ifdef SWOOLE_SOCKETS_SUPPORT
else {
php_socket *php_sock;
if ((php_sock = (php_socket *) zend_fetch_resource_ex(zsocket, nullptr, php_sockets_le_socket()))) {
if ((php_sock = SW_Z_SOCKET_P(zsocket))) {
fd = php_sock->bsd_socket;
*async = 1;
return fd;
Expand All @@ -386,7 +386,9 @@ int php_swoole_convert_to_fd_ex(zval *zsocket, int *async) {

#ifdef SWOOLE_SOCKETS_SUPPORT
php_socket *php_swoole_convert_to_socket(int sock) {
php_socket *socket_object = (php_socket *) emalloc(sizeof *socket_object);
php_socket *socket_object;
#if PHP_VERSION_ID < 80000
socket_object = (php_socket *) emalloc(sizeof *socket_object);
sw_memset_zero(socket_object, sizeof(php_socket));
socket_object->bsd_socket = sock;
socket_object->blocking = 1;
Expand All @@ -410,6 +412,12 @@ php_socket *php_swoole_convert_to_socket(int sock) {
} else {
socket_object->blocking = !(t & O_NONBLOCK);
}
#else
zval zsocket;
object_init_ex(&zsocket, socket_ce);
socket_object = Z_SOCKET_P(&zsocket);
socket_import_file_descriptor(sock, socket_object);
#endif
return socket_object;
}
#endif
Expand Down
2 changes: 1 addition & 1 deletion swoole_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3529,7 +3529,7 @@ static PHP_METHOD(swoole_server, getSocket) {
if (!socket_object) {
RETURN_FALSE;
}
SW_ZEND_REGISTER_RESOURCE(return_value, (void *) socket_object, php_sockets_le_socket());
SW_ZVAL_SOCKET(return_value, socket_object);
zval *zsocket = sw_zval_dup(return_value);
Z_TRY_ADDREF_P(zsocket);
}
Expand Down
2 changes: 1 addition & 1 deletion swoole_server_port.cc
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,7 @@ static PHP_METHOD(swoole_server_port, getSocket) {
if (!socket_object) {
RETURN_FALSE;
}
SW_ZEND_REGISTER_RESOURCE(return_value, (void *) socket_object, php_sockets_le_socket());
SW_ZVAL_SOCKET(return_value, socket_object);
zval *zsocket = sw_zval_dup(return_value);
Z_TRY_ADDREF_P(zsocket);
}
Expand Down

0 comments on commit 0a1ab3d

Please sign in to comment.