php5: update pecl module libevent to 0.0.5
authorMichael Heimpold <mhei@heimpold.de>
Wed, 25 Jul 2012 20:43:20 +0000 (20:43 +0000)
committerMichael Heimpold <mhei@heimpold.de>
Wed, 25 Jul 2012 20:43:20 +0000 (20:43 +0000)
Signed-off-by: Michael Heimpold <mhei@heimpold.de>
SVN-Revision: 32876

lang/php5/patches/020-PECL-add-libevent.patch

index 71869a8f30278cca020e153a6e19ab63e8bd1198..7e8ede653ad006dc642c1006813967f5a0664d3f 100644 (file)
@@ -59,7 +59,7 @@
 +fi
 --- /dev/null
 +++ b/ext/libevent/libevent.c
-@@ -0,0 +1,1564 @@
+@@ -0,0 +1,1663 @@
 +/*
 +  +----------------------------------------------------------------------+
 +  | PHP Version 5                                                        |
@@ -79,7 +79,7 @@
 +  +----------------------------------------------------------------------+
 +*/
 +
-+/* $Id: libevent.c 300303 2010-06-09 10:43:38Z tony2001 $ */
++/* $Id: libevent.c 318910 2011-11-08 12:34:37Z tony2001 $ */
 +
 +#ifdef HAVE_CONFIG_H
 +#include "config.h"
 +# define LIBEVENT_SOCKETS_SUPPORT
 +#endif
 +
++#ifndef ZEND_FETCH_RESOURCE_NO_RETURN 
++# define ZEND_FETCH_RESOURCE_NO_RETURN(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \
++      (rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 1, resource_type))
++#endif
++
 +#include <event.h>
 +
 +#if PHP_MAJOR_VERSION < 5
 +
 +      base->events = 0;
 +
++#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4
++      base->rsrc_id = zend_list_insert(base, le_event_base TSRMLS_CC);
++#else
 +      base->rsrc_id = zend_list_insert(base, le_event_base);
++#endif
 +      RETURN_RESOURCE(base->rsrc_id);
 +}
 +/* }}} */
 +      event->in_free = 0;
 +      TSRMLS_SET_CTX(event->thread_ctx);
 +
++#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4
++      event->rsrc_id = zend_list_insert(event, le_event TSRMLS_CC);
++#else
 +      event->rsrc_id = zend_list_insert(event, le_event);
++#endif
 +      RETURN_RESOURCE(event->rsrc_id);
 +}
 +/* }}} */
 +}
 +/* }}} */
 +
-+/* {{{ proto bool event_set(resource event, resource fd, int events, mixed callback[, mixed arg]) 
++/* {{{ proto bool event_set(resource event, mixed fd, int events, mixed callback[, mixed arg]) 
 + */
 +static PHP_FUNCTION(event_set)
 +{
 +#ifdef LIBEVENT_SOCKETS_SUPPORT
 +      php_socket *php_sock;
 +#endif
++      int ret;
 +
 +      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rZlz|z", &zevent, &fd, &events, &zcallback, &zarg) != SUCCESS) {
 +              return;
 +                      RETURN_FALSE;
 +              }
 +      } else {
-+              if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, fd, -1, NULL, php_file_le_stream())) {
-+                      if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&file_desc, 1) != SUCCESS || file_desc < 0) {
++              if (Z_TYPE_PP(fd) == IS_RESOURCE) {
++                      if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, fd, -1, NULL, php_file_le_stream())) {
++                              if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&file_desc, 1) != SUCCESS || file_desc < 0) {
++                                      RETURN_FALSE;
++                              }
++                      } else {
++#ifdef LIBEVENT_SOCKETS_SUPPORT
++                              if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, fd, -1, NULL, php_sockets_le_socket())) {
++                                      file_desc = php_sock->bsd_socket;
++                              } else {
++                                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource");
++                                      RETURN_FALSE;
++                              }
++#else
++                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource");
++                              RETURN_FALSE;
++#endif
++                      }
++              } else if (Z_TYPE_PP(fd) == IS_LONG) {
++                      file_desc = Z_LVAL_PP(fd);
++                      if (file_desc < 0) {
++                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid file descriptor passed");
 +                              RETURN_FALSE;
 +                      }
 +              } else {
 +#ifdef LIBEVENT_SOCKETS_SUPPORT
-+                      if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, fd, -1, NULL, php_sockets_le_socket())) {
-+                              file_desc = php_sock->bsd_socket;
-+                      } else {
-+                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource");
-+                              RETURN_FALSE;
-+                      }
++                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream or socket resource or a file descriptor of type long");
 +#else
-+                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource");
-+                      RETURN_FALSE;
++                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long");
 +#endif
++                      RETURN_FALSE;
 +              }
 +      }
 +
 +      if (old_callback) {
 +              _php_event_callback_free(old_callback);
 +      }
++
++      if (event->base) {
++              ret = event_base_set(event->base->base, event->event);
++              if (ret != 0) {
++                      RETURN_FALSE;
++              }
++      }
 +      RETURN_TRUE;
 +}
 +/* }}} */
 +}
 +/* }}} */
 +
++/* {{{ proto bool event_priority_set(resource event, int priority) 
++ */
++static PHP_FUNCTION(event_priority_set)
++{
++      zval *zevent;
++      php_event_t *event;
++      long priority;
++      int ret;
++
++      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zevent, &priority) != SUCCESS) {
++              return;
++      }
++
++      ZVAL_TO_EVENT(zevent, event);
++
++      if (!event->base) {
++              php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set event priority without an event base");
++              RETURN_FALSE;
++      }
++
++      ret = event_priority_set(event->event, priority);
++
++      if (ret == 0) {
++              RETURN_TRUE;
++      }
++      RETURN_FALSE;
++}
++/* }}} */
 +
 +/* {{{ proto bool event_timer_set(resource event, mixed callback[, mixed arg]) 
 + */
 +
 +
 +
-+/* {{{ proto resource event_buffer_new(resource stream, mixed readcb, mixed writecb, mixed errorcb[, mixed arg]) 
++/* {{{ proto resource event_buffer_new(mixed fd, mixed readcb, mixed writecb, mixed errorcb[, mixed arg]) 
 + */
 +static PHP_FUNCTION(event_buffer_new)
 +{
 +      php_bufferevent_t *bevent;
 +      php_stream *stream;
-+      zval *zstream, *zreadcb, *zwritecb, *zerrorcb, *zarg = NULL;
++      zval *zfd, *zreadcb, *zwritecb, *zerrorcb, *zarg = NULL;
 +      php_socket_t fd;
 +      char *func_name;
 +#ifdef LIBEVENT_SOCKETS_SUPPORT
 +      php_socket *php_sock;
 +#endif
 +
-+      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzzz|z", &zstream, &zreadcb, &zwritecb, &zerrorcb, &zarg) != SUCCESS) {
++      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzzz|z", &zfd, &zreadcb, &zwritecb, &zerrorcb, &zarg) != SUCCESS) {
 +              return;
 +      }
-+
-+      if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zstream, -1, NULL, php_file_le_stream())) {
-+              if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) {
++      
++      if (Z_TYPE_P(zfd) == IS_RESOURCE) {
++              if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) {
++                      if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) {
++                              RETURN_FALSE;
++                      }
++              } else {
++#ifdef LIBEVENT_SOCKETS_SUPPORT
++                      if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) {
++                              fd = php_sock->bsd_socket;
++                      } else {
++                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream or socket resource or a file descriptor of type long");
++                              RETURN_FALSE;
++                      }
++#else
++                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long");
 +                      RETURN_FALSE;
++#endif
 +              }
++      } else if (Z_TYPE_P(zfd) == IS_LONG) {
++              fd = Z_LVAL_P(zfd);
 +      } else {
 +#ifdef LIBEVENT_SOCKETS_SUPPORT
-+              if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zstream, -1, NULL, php_sockets_le_socket())) {
-+                      fd = php_sock->bsd_socket;
-+              } else {
-+                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream argument must be either valid PHP stream or valid PHP socket resource");
-+                      RETURN_FALSE;
-+              }
++              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream or socket resource or a file descriptor of type long");
 +#else
-+              php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream argument must be valid PHP stream resource");
-+              RETURN_FALSE;
++              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long");
 +#endif
++              RETURN_FALSE;
 +      }
 +
 +      if (Z_TYPE_P(zreadcb) != IS_NULL) {
 +
 +      TSRMLS_SET_CTX(bevent->thread_ctx);
 +
++#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4
++      bevent->rsrc_id = zend_list_insert(bevent, le_bufferevent TSRMLS_CC);
++#else
 +      bevent->rsrc_id = zend_list_insert(bevent, le_bufferevent);
++#endif
 +      RETURN_RESOURCE(bevent->rsrc_id);
 +}
 +/* }}} */
 +      php_socket *php_sock;
 +#endif
 +
-+      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &zbevent, &zfd) != SUCCESS) {
++      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &zbevent, &zfd) != SUCCESS) {
 +              return;
 +      }
 +
 +      ZVAL_TO_BEVENT(zbevent, bevent);
-+      if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) {
-+              if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) {
++
++      if (Z_TYPE_P(zfd) == IS_RESOURCE) {
++              if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) {
++                      if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) {
++                              RETURN_FALSE;
++                      }
++              } else {
++#ifdef LIBEVENT_SOCKETS_SUPPORT
++                      if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) {
++                              fd = php_sock->bsd_socket;
++                      } else {
++                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream or socket resource or a file descriptor of type long");
++                              RETURN_FALSE;
++                      }
++#else
++                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long");
 +                      RETURN_FALSE;
++#endif
 +              }
++      } else if (Z_TYPE_P(zfd) == IS_LONG) {
++              fd = Z_LVAL_P(zfd);
 +      } else {
 +#ifdef LIBEVENT_SOCKETS_SUPPORT
-+              if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) {
-+                      fd = php_sock->bsd_socket;
-+              } else {
-+                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource");
-+                      RETURN_FALSE;
-+              }
++              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream or socket resource or a file descriptor of type long");
 +#else
-+              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource");
-+              RETURN_FALSE;
++              php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long");
 +#endif
++              RETURN_FALSE;
 +      }
 +
 +      bufferevent_setfd(bevent->bevent, fd);
 +      php_info_print_table_start();
 +      php_info_print_table_header(2, "libevent support", "enabled");
 +      php_info_print_table_row(2, "extension version", PHP_LIBEVENT_VERSION);
-+      php_info_print_table_row(2, "Revision", "$Revision: 300303 $");
++      php_info_print_table_row(2, "Revision", "$Revision: 318910 $");
 +      
 +      snprintf(buf, sizeof(buf) - 1, "%s", event_get_version());
 +      php_info_print_table_row(2, "libevent version", buf);
 +ZEND_END_ARG_INFO()
 +
 +EVENT_ARGINFO
++ZEND_BEGIN_ARG_INFO_EX(arginfo_event_priority_set, 0, 0, 2)
++      ZEND_ARG_INFO(0, event)
++      ZEND_ARG_INFO(0, priority)
++ZEND_END_ARG_INFO()
++
++EVENT_ARGINFO
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_event_buffer_new, 0, 0, 4)
 +      ZEND_ARG_INFO(0, stream)
 +      ZEND_ARG_INFO(0, readcb)
 +      PHP_FE(event_add,                                       arginfo_event_add)
 +      PHP_FE(event_set,                                       arginfo_event_set)
 +      PHP_FE(event_del,                                       arginfo_event_del)
++      PHP_FE(event_priority_set,                      arginfo_event_priority_set)
 +      PHP_FE(event_buffer_new,                        arginfo_event_buffer_new)
 +      PHP_FE(event_buffer_free,                       arginfo_event_buffer_free)
 +      PHP_FE(event_buffer_base_set,           arginfo_event_buffer_base_set)
 +      PHP_FE(event_add,                                       NULL)
 +      PHP_FE(event_set,                                       NULL)
 +      PHP_FE(event_del,                                       NULL)
++      PHP_FE(event_priority_set,                      NULL)
 +      PHP_FE(event_buffer_new,                        NULL)
 +      PHP_FE(event_buffer_free,                       NULL)
 +      PHP_FE(event_buffer_base_set,           NULL)