summaryrefslogtreecommitdiff
path: root/ext/sockets
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2015-02-02 13:23:16 +0800
committerXinchen Hui <laruence@gmail.com>2015-02-02 13:23:16 +0800
commit942809909e1bc125db038796c0a1a0b53eeaca7d (patch)
treebddec8b44878488fc73e8fe2fb9e30b7ee4f9b67 /ext/sockets
parentc9e44dc2dfa7ad91fe9253378a49e9f5b057992e (diff)
downloadphp-git-942809909e1bc125db038796c0a1a0b53eeaca7d.tar.gz
Cleanup resource handling APIs
Diffstat (limited to 'ext/sockets')
-rw-r--r--ext/sockets/conversions.c8
-rw-r--r--ext/sockets/sendrecvmsg.c12
-rw-r--r--ext/sockets/sockets.c103
3 files changed, 82 insertions, 41 deletions
diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c
index 27638f361f..270648c5e3 100644
--- a/ext/sockets/conversions.c
+++ b/ext/sockets/conversions.c
@@ -1351,15 +1351,13 @@ static void from_zval_write_fd_array_aux(zval *elem, unsigned i, void **args, se
php_stream *stream;
php_socket *sock;
- ZEND_FETCH_RESOURCE_NO_RETURN(sock, php_socket *, elem, -1,
- NULL, php_sockets_le_socket());
+ sock = (php_socket *)zend_fetch_resource_ex(elem, NULL, php_sockets_le_socket());
if (sock) {
iarr[i] = sock->bsd_socket;
return;
}
- ZEND_FETCH_RESOURCE2_NO_RETURN(stream, php_stream *, elem, -1,
- NULL, php_file_le_stream(), php_file_le_pstream());
+ stream = (php_stream *)zend_fetch_resource2_ex(elem, NULL, NULL, php_file_le_stream(), php_file_le_pstream());
if (stream == NULL) {
do_from_zval_err(ctx, "resource is not a stream or a socket");
return;
@@ -1423,7 +1421,7 @@ void to_zval_read_fd_array(const char *data, zval *zv, res_context *ctx)
}
if (S_ISSOCK(statbuf.st_mode)) {
php_socket *sock = socket_import_file_descriptor(fd);
- zend_register_resource(&elem, sock, php_sockets_le_socket());
+ ZVAL_RES(&elem, zend_register_resource(sock, php_sockets_le_socket()));
} else {
php_stream *stream = php_stream_fopen_from_fd(fd, "rw", NULL);
php_stream_to_zval(stream, &elem);
diff --git a/ext/sockets/sendrecvmsg.c b/ext/sockets/sendrecvmsg.c
index 32382da7e0..cccaf4c407 100644
--- a/ext/sockets/sendrecvmsg.c
+++ b/ext/sockets/sendrecvmsg.c
@@ -181,8 +181,10 @@ PHP_FUNCTION(socket_sendmsg)
LONG_CHECK_VALID_INT(flags);
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, zsocket, -1,
- php_sockets_le_socket_name, php_sockets_le_socket());
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(zsocket),
+ php_sockets_le_socket_name, php_sockets_le_socket())) == NULL) {
+ RETURN_FALSE;
+ }
msghdr = from_zval_run_conversions(zmsg, php_sock, from_zval_write_msghdr_send,
sizeof(*msghdr), "msghdr", &allocations, &err);
@@ -224,8 +226,10 @@ PHP_FUNCTION(socket_recvmsg)
LONG_CHECK_VALID_INT(flags);
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, zsocket, -1,
- php_sockets_le_socket_name, php_sockets_le_socket());
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(zsocket),
+ php_sockets_le_socket_name, php_sockets_le_socket())) == NULL) {
+ RETURN_FALSE;
+ }
msghdr = from_zval_run_conversions(zmsg, php_sock, from_zval_write_msghdr_recv,
sizeof(*msghdr), "msghdr", &allocations, &err);
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index a1176ab85f..68d75e8d3b 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -781,7 +781,7 @@ static int php_sock_array_to_fd_set(zval *sock_array, fd_set *fds, PHP_SOCKET *m
if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(sock_array), element) {
- php_sock = (php_socket*) zend_fetch_resource(element, -1, le_socket_name, NULL, 1, le_socket);
+ php_sock = (php_socket*) zend_fetch_resource_ex(element, le_socket_name, le_socket);
if (!php_sock) continue; /* If element is not a resource, skip it */
PHP_SAFE_FD_SET(php_sock->bsd_socket, fds);
@@ -809,7 +809,7 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds) /* {{{ */
array_init(&new_hash);
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(sock_array), num_key, key, element) {
- php_sock = (php_socket*) zend_fetch_resource(element, -1, le_socket_name, NULL, 1, le_socket);
+ php_sock = (php_socket*) zend_fetch_resource_ex(element, le_socket_name, le_socket);
if (!php_sock) continue; /* If element is not a resource, skip it */
if (PHP_SAFE_FD_ISSET(php_sock->bsd_socket, fds)) {
@@ -927,7 +927,7 @@ PHP_FUNCTION(socket_create_listen)
php_sock->error = 0;
php_sock->blocking = 1;
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
+ RETURN_RES(zend_register_resource(php_sock, le_socket));
}
/* }}} */
@@ -944,13 +944,15 @@ PHP_FUNCTION(socket_accept)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr*)&sa, &php_sa_len)) {
RETURN_FALSE;
}
- ZEND_REGISTER_RESOURCE(return_value, new_sock, le_socket);
+ RETURN_RES(zend_register_resource(new_sock, le_socket));
}
/* }}} */
@@ -965,13 +967,14 @@ PHP_FUNCTION(socket_set_nonblock)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (!Z_ISUNDEF(php_sock->zstream)) {
php_stream *stream;
/* omit notice if resource doesn't exist anymore */
- stream = zend_fetch_resource(&php_sock->zstream, -1,
- NULL, NULL, 2, php_file_le_stream(), php_file_le_pstream());
+ stream = zend_fetch_resource2_ex(&php_sock->zstream, NULL, NULL, php_file_le_stream(), php_file_le_pstream());
if (stream != NULL) {
if (php_stream_set_option(stream, PHP_STREAM_OPTION_BLOCKING, 0,
NULL) != -1) {
@@ -1002,15 +1005,16 @@ PHP_FUNCTION(socket_set_block)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
/* if socket was created from a stream, give the stream a chance to take
* care of the operation itself, thereby allowing it to update its internal
* state */
if (!Z_ISUNDEF(php_sock->zstream)) {
php_stream *stream;
- stream = zend_fetch_resource(&php_sock->zstream, -1,
- NULL, NULL, 2, php_file_le_stream(), php_file_le_pstream());
+ stream = zend_fetch_resource2_ex(&php_sock->zstream, NULL, NULL, php_file_le_stream(), php_file_le_pstream());
if (stream != NULL) {
if (php_stream_set_option(stream, PHP_STREAM_OPTION_BLOCKING, 1,
NULL) != -1) {
@@ -1042,7 +1046,9 @@ PHP_FUNCTION(socket_listen)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (listen(php_sock->bsd_socket, backlog) != 0) {
PHP_SOCKET_ERROR(php_sock, "unable to listen on socket", errno);
@@ -1063,7 +1069,10 @@ PHP_FUNCTION(socket_close)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
+
if (!Z_ISUNDEF(php_sock->zstream)) {
php_stream *stream = NULL;
php_stream_from_zval_no_verify(stream, &php_sock->zstream);
@@ -1093,7 +1102,9 @@ PHP_FUNCTION(socket_write)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (ZEND_NUM_ARGS() < 3) {
length = str_len;
@@ -1135,7 +1146,9 @@ PHP_FUNCTION(socket_read)
tmpbuf = zend_string_alloc(length, 0);
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (type == PHP_NORMAL_READ) {
retval = php_read(php_sock, tmpbuf->val, length, 0);
@@ -1193,7 +1206,9 @@ PHP_FUNCTION(socket_getsockname)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
sa = (struct sockaddr *) &sa_storage;
@@ -1274,7 +1289,9 @@ PHP_FUNCTION(socket_getpeername)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
sa = (struct sockaddr *) &sa_storage;
@@ -1371,7 +1388,7 @@ PHP_FUNCTION(socket_create)
php_sock->error = 0;
php_sock->blocking = 1;
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
+ RETURN_RES(zend_register_resource(php_sock, le_socket));
}
/* }}} */
@@ -1391,7 +1408,9 @@ PHP_FUNCTION(socket_connect)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
switch(php_sock->type) {
#if HAVE_IPV6
@@ -1495,7 +1514,9 @@ PHP_FUNCTION(socket_bind)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
switch(php_sock->type) {
case AF_UNIX:
@@ -1575,7 +1596,9 @@ PHP_FUNCTION(socket_recv)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, php_sock_res, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(php_sock_res), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
/* overflow check */
if ((len + 1) < 2) {
@@ -1621,7 +1644,9 @@ PHP_FUNCTION(socket_send)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
retval = send(php_sock->bsd_socket, buf, (buf_len < len ? buf_len : len), flags);
@@ -1656,7 +1681,9 @@ PHP_FUNCTION(socket_recvfrom)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
/* overflow check */
if ((arg3 + 2) < 3) {
@@ -1779,7 +1806,9 @@ PHP_FUNCTION(socket_sendto)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
switch (php_sock->type) {
case AF_UNIX:
@@ -1855,7 +1884,9 @@ PHP_FUNCTION(socket_get_option)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (level == IPPROTO_IP) {
switch (optname) {
@@ -1968,7 +1999,9 @@ PHP_FUNCTION(socket_set_option)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
set_errno(0);
@@ -2138,8 +2171,8 @@ PHP_FUNCTION(socket_create_pair)
php_sock[0]->blocking = 1;
php_sock[1]->blocking = 1;
- ZEND_REGISTER_RESOURCE(&retval[0], php_sock[0], le_socket);
- ZEND_REGISTER_RESOURCE(&retval[1], php_sock[1], le_socket);
+ ZVAL_RES(&retval[0], zend_register_resource(php_sock[0], le_socket));
+ ZVAL_RES(&retval[1], zend_register_resource(php_sock[1], le_socket));
add_index_zval(fds_array_zval, 0, &retval[0]);
add_index_zval(fds_array_zval, 1, &retval[1]);
@@ -2162,7 +2195,9 @@ PHP_FUNCTION(socket_shutdown)
return;
}
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
PHP_SOCKET_ERROR(php_sock, "unable to shutdown socket", errno);
@@ -2186,7 +2221,9 @@ PHP_FUNCTION(socket_last_error)
}
if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
RETVAL_LONG(php_sock->error);
} else {
RETVAL_LONG(SOCKETS_G(last_error));
@@ -2206,7 +2243,9 @@ PHP_FUNCTION(socket_clear_error)
}
if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, arg1, -1, le_socket_name, le_socket);
+ if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
+ RETURN_FALSE;
+ }
php_sock->error = 0;
} else {
SOCKETS_G(last_error) = 0;
@@ -2306,7 +2345,7 @@ PHP_FUNCTION(socket_import_stream)
php_stream_set_option(stream, PHP_STREAM_OPTION_READ_BUFFER,
PHP_STREAM_BUFFER_NONE, NULL);
- ZEND_REGISTER_RESOURCE(return_value, retsock, le_socket);
+ RETURN_RES(zend_register_resource(retsock, le_socket));
}
/* }}} */