Changeset 32876
- Timestamp:
- 2012-07-25T22:43:20+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
packages/lang/php5/patches/020-PECL-add-libevent.patch
r27838 r32876 60 60 --- /dev/null 61 61 +++ b/ext/libevent/libevent.c 62 @@ -0,0 +1,1 564@@62 @@ -0,0 +1,1663 @@ 63 63 +/* 64 64 + +----------------------------------------------------------------------+ … … 80 80 +*/ 81 81 + 82 +/* $Id: libevent.c 3 00303 2010-06-09 10:43:38Z tony2001 $ */82 +/* $Id: libevent.c 318910 2011-11-08 12:34:37Z tony2001 $ */ 83 83 + 84 84 +#ifdef HAVE_CONFIG_H … … 98 98 +# include "ext/sockets/php_sockets.h" 99 99 +# define LIBEVENT_SOCKETS_SUPPORT 100 +#endif 101 + 102 +#ifndef ZEND_FETCH_RESOURCE_NO_RETURN 103 +# define ZEND_FETCH_RESOURCE_NO_RETURN(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \ 104 + (rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 1, resource_type)) 100 105 +#endif 101 106 + … … 414 419 + base->events = 0; 415 420 + 421 +#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4 422 + base->rsrc_id = zend_list_insert(base, le_event_base TSRMLS_CC); 423 +#else 416 424 + base->rsrc_id = zend_list_insert(base, le_event_base); 425 +#endif 417 426 + RETURN_RESOURCE(base->rsrc_id); 418 427 +} … … 602 611 + TSRMLS_SET_CTX(event->thread_ctx); 603 612 + 613 +#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4 614 + event->rsrc_id = zend_list_insert(event, le_event TSRMLS_CC); 615 +#else 604 616 + event->rsrc_id = zend_list_insert(event, le_event); 617 +#endif 605 618 + RETURN_RESOURCE(event->rsrc_id); 606 619 +} … … 661 674 +/* }}} */ 662 675 + 663 +/* {{{ proto bool event_set(resource event, resourcefd, int events, mixed callback[, mixed arg])676 +/* {{{ proto bool event_set(resource event, mixed fd, int events, mixed callback[, mixed arg]) 664 677 + */ 665 678 +static PHP_FUNCTION(event_set) … … 675 688 + php_socket *php_sock; 676 689 +#endif 690 + int ret; 677 691 + 678 692 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rZlz|z", &zevent, &fd, &events, &zcallback, &zarg) != SUCCESS) { … … 691 705 + } 692 706 + } else { 693 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, fd, -1, NULL, php_file_le_stream())) { 694 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&file_desc, 1) != SUCCESS || file_desc < 0) { 707 + if (Z_TYPE_PP(fd) == IS_RESOURCE) { 708 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, fd, -1, NULL, php_file_le_stream())) { 709 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&file_desc, 1) != SUCCESS || file_desc < 0) { 710 + RETURN_FALSE; 711 + } 712 + } else { 713 +#ifdef LIBEVENT_SOCKETS_SUPPORT 714 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, fd, -1, NULL, php_sockets_le_socket())) { 715 + file_desc = php_sock->bsd_socket; 716 + } else { 717 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource"); 718 + RETURN_FALSE; 719 + } 720 +#else 721 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource"); 722 + RETURN_FALSE; 723 +#endif 724 + } 725 + } else if (Z_TYPE_PP(fd) == IS_LONG) { 726 + file_desc = Z_LVAL_PP(fd); 727 + if (file_desc < 0) { 728 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid file descriptor passed"); 695 729 + RETURN_FALSE; 696 730 + } 697 731 + } else { 698 732 +#ifdef LIBEVENT_SOCKETS_SUPPORT 699 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, fd, -1, NULL, php_sockets_le_socket())) { 700 + file_desc = php_sock->bsd_socket; 701 + } else { 702 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource"); 703 + RETURN_FALSE; 704 + } 733 + 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"); 705 734 +#else 706 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource"); 735 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long"); 736 +#endif 707 737 + RETURN_FALSE; 708 +#endif709 738 + } 710 739 + } … … 742 771 + _php_event_callback_free(old_callback); 743 772 + } 773 + 774 + if (event->base) { 775 + ret = event_base_set(event->base->base, event->event); 776 + if (ret != 0) { 777 + RETURN_FALSE; 778 + } 779 + } 744 780 + RETURN_TRUE; 745 781 +} … … 771 807 +/* }}} */ 772 808 + 809 +/* {{{ proto bool event_priority_set(resource event, int priority) 810 + */ 811 +static PHP_FUNCTION(event_priority_set) 812 +{ 813 + zval *zevent; 814 + php_event_t *event; 815 + long priority; 816 + int ret; 817 + 818 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zevent, &priority) != SUCCESS) { 819 + return; 820 + } 821 + 822 + ZVAL_TO_EVENT(zevent, event); 823 + 824 + if (!event->base) { 825 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set event priority without an event base"); 826 + RETURN_FALSE; 827 + } 828 + 829 + ret = event_priority_set(event->event, priority); 830 + 831 + if (ret == 0) { 832 + RETURN_TRUE; 833 + } 834 + RETURN_FALSE; 835 +} 836 +/* }}} */ 773 837 + 774 838 +/* {{{ proto bool event_timer_set(resource event, mixed callback[, mixed arg]) … … 855 919 + 856 920 + 857 +/* {{{ proto resource event_buffer_new( resource stream, mixed readcb, mixed writecb, mixed errorcb[, mixed arg])921 +/* {{{ proto resource event_buffer_new(mixed fd, mixed readcb, mixed writecb, mixed errorcb[, mixed arg]) 858 922 + */ 859 923 +static PHP_FUNCTION(event_buffer_new) … … 861 925 + php_bufferevent_t *bevent; 862 926 + php_stream *stream; 863 + zval *z stream, *zreadcb, *zwritecb, *zerrorcb, *zarg = NULL;927 + zval *zfd, *zreadcb, *zwritecb, *zerrorcb, *zarg = NULL; 864 928 + php_socket_t fd; 865 929 + char *func_name; … … 868 932 +#endif 869 933 + 870 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzzz|z", &zstream, &zreadcb, &zwritecb, &zerrorcb, &zarg) != SUCCESS) { 871 + return; 872 + } 873 + 874 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zstream, -1, NULL, php_file_le_stream())) { 875 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) { 934 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzzz|z", &zfd, &zreadcb, &zwritecb, &zerrorcb, &zarg) != SUCCESS) { 935 + return; 936 + } 937 + 938 + if (Z_TYPE_P(zfd) == IS_RESOURCE) { 939 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) { 940 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) { 941 + RETURN_FALSE; 942 + } 943 + } else { 944 +#ifdef LIBEVENT_SOCKETS_SUPPORT 945 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) { 946 + fd = php_sock->bsd_socket; 947 + } else { 948 + 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"); 949 + RETURN_FALSE; 950 + } 951 +#else 952 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long"); 876 953 + RETURN_FALSE; 877 + } 954 +#endif 955 + } 956 + } else if (Z_TYPE_P(zfd) == IS_LONG) { 957 + fd = Z_LVAL_P(zfd); 878 958 + } else { 879 959 +#ifdef LIBEVENT_SOCKETS_SUPPORT 880 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zstream, -1, NULL, php_sockets_le_socket())) { 881 + fd = php_sock->bsd_socket; 882 + } else { 883 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream argument must be either valid PHP stream or valid PHP socket resource"); 884 + RETURN_FALSE; 885 + } 960 + 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"); 886 961 +#else 887 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream argument must be valid PHP stream resource"); 962 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long"); 963 +#endif 888 964 + RETURN_FALSE; 889 +#endif890 965 + } 891 966 + … … 946 1021 + TSRMLS_SET_CTX(bevent->thread_ctx); 947 1022 + 1023 +#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 4 1024 + bevent->rsrc_id = zend_list_insert(bevent, le_bufferevent TSRMLS_CC); 1025 +#else 948 1026 + bevent->rsrc_id = zend_list_insert(bevent, le_bufferevent); 1027 +#endif 949 1028 + RETURN_RESOURCE(bevent->rsrc_id); 950 1029 +} … … 1199 1278 +#endif 1200 1279 + 1201 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r r", &zbevent, &zfd) != SUCCESS) {1280 + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &zbevent, &zfd) != SUCCESS) { 1202 1281 + return; 1203 1282 + } 1204 1283 + 1205 1284 + ZVAL_TO_BEVENT(zbevent, bevent); 1206 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) { 1207 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) { 1285 + 1286 + if (Z_TYPE_P(zfd) == IS_RESOURCE) { 1287 + if (ZEND_FETCH_RESOURCE_NO_RETURN(stream, php_stream *, &zfd, -1, NULL, php_file_le_stream())) { 1288 + if (php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&fd, 1) != SUCCESS || fd < 0) { 1289 + RETURN_FALSE; 1290 + } 1291 + } else { 1292 +#ifdef LIBEVENT_SOCKETS_SUPPORT 1293 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) { 1294 + fd = php_sock->bsd_socket; 1295 + } else { 1296 + 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"); 1297 + RETURN_FALSE; 1298 + } 1299 +#else 1300 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long"); 1208 1301 + RETURN_FALSE; 1209 + } 1302 +#endif 1303 + } 1304 + } else if (Z_TYPE_P(zfd) == IS_LONG) { 1305 + fd = Z_LVAL_P(zfd); 1210 1306 + } else { 1211 1307 +#ifdef LIBEVENT_SOCKETS_SUPPORT 1212 + if (ZEND_FETCH_RESOURCE_NO_RETURN(php_sock, php_socket *, &zfd, -1, NULL, php_sockets_le_socket())) { 1213 + fd = php_sock->bsd_socket; 1214 + } else { 1215 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be either valid PHP stream or valid PHP socket resource"); 1216 + RETURN_FALSE; 1217 + } 1308 + 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"); 1218 1309 +#else 1219 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource"); 1310 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "fd argument must be valid PHP stream resource or a file descriptor of type long"); 1311 +#endif 1220 1312 + RETURN_FALSE; 1221 +#endif1222 1313 + } 1223 1314 + … … 1359 1450 + php_info_print_table_header(2, "libevent support", "enabled"); 1360 1451 + php_info_print_table_row(2, "extension version", PHP_LIBEVENT_VERSION); 1361 + php_info_print_table_row(2, "Revision", "$Revision: 3 00303$");1452 + php_info_print_table_row(2, "Revision", "$Revision: 318910 $"); 1362 1453 + 1363 1454 + snprintf(buf, sizeof(buf) - 1, "%s", event_get_version()); … … 1427 1518 +ZEND_BEGIN_ARG_INFO_EX(arginfo_event_del, 0, 0, 1) 1428 1519 + ZEND_ARG_INFO(0, event) 1520 +ZEND_END_ARG_INFO() 1521 + 1522 +EVENT_ARGINFO 1523 +ZEND_BEGIN_ARG_INFO_EX(arginfo_event_priority_set, 0, 0, 2) 1524 + ZEND_ARG_INFO(0, event) 1525 + ZEND_ARG_INFO(0, priority) 1429 1526 +ZEND_END_ARG_INFO() 1430 1527 + … … 1536 1633 + PHP_FE(event_set, arginfo_event_set) 1537 1634 + PHP_FE(event_del, arginfo_event_del) 1635 + PHP_FE(event_priority_set, arginfo_event_priority_set) 1538 1636 + PHP_FE(event_buffer_new, arginfo_event_buffer_new) 1539 1637 + PHP_FE(event_buffer_free, arginfo_event_buffer_free) … … 1572 1670 + PHP_FE(event_set, NULL) 1573 1671 + PHP_FE(event_del, NULL) 1672 + PHP_FE(event_priority_set, NULL) 1574 1673 + PHP_FE(event_buffer_new, NULL) 1575 1674 + PHP_FE(event_buffer_free, NULL)
Note: See TracChangeset
for help on using the changeset viewer.