cvs: php4 /ext/curl interface.c php_curl.h

From: Date: Wed, 21 May 2003 23:15:28 +0000
Subject: cvs: php4 /ext/curl interface.c php_curl.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-21202@lists.php.net to get a copy of this message
sterling Wed May 21 19:15:28 2003 EDT Modified files: /php4/ext/curl interface.c php_curl.h Log: switch over to using fast_call_user_function() with the callbacks Index: php4/ext/curl/interface.c diff -u php4/ext/curl/interface.c:1.16 php4/ext/curl/interface.c:1.17 --- php4/ext/curl/interface.c:1.16 Sat May 17 10:12:36 2003 +++ php4/ext/curl/interface.c Wed May 21 19:15:28 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: interface.c,v 1.16 2003/05/17 14:12:36 sterling Exp $ */ +/* $Id: interface.c,v 1.17 2003/05/21 23:15:28 sterling Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -382,30 +382,32 @@ smart_str_appendl(&t->buf, data, (int) length); break; case PHP_CURL_USER: { - zval *argv[2]; - zval *retval; + zval **argv[2]; + zval *retval_ptr = NULL; + zval *handle = NULL; + zval *zdata = NULL; int error; - MAKE_STD_ZVAL(argv[0]); - MAKE_STD_ZVAL(argv[1]); - MAKE_STD_ZVAL(retval); - - ZVAL_RESOURCE(argv[0], ch->id); + MAKE_STD_ZVAL(handle); + ZVAL_RESOURCE(handle, ch->id); zend_list_addref(ch->id); - ZVAL_STRINGL(argv[1], data, length, 1); - - error = call_user_function(EG(function_table), NULL, t->func, retval, 2, argv TSRMLS_CC); + argv[0] = &handle; + + MAKE_STD_ZVAL(zdata); + ZVAL_STRINGL(zdata, data, length, 1); + argv[1] = &zdata; + error = fast_call_user_function(EG(function_table), NULL, t->func_name, &retval_ptr, 2, argv, 0, NULL, &t->func_ptr TSRMLS_CC); if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_WRITEFUNCTION"); length = -1; } else { - length = Z_LVAL_P(retval); + length = Z_LVAL_P(retval_ptr); } - zval_ptr_dtor(&argv[0]); - zval_ptr_dtor(&argv[1]); - zval_ptr_dtor(&retval); + zval_ptr_dtor(argv[0]); + zval_ptr_dtor(argv[1]); + zval_ptr_dtor(&retval_ptr); break; } } @@ -446,7 +448,7 @@ zend_list_addref(t->fd); ZVAL_LONG(argv[2], (int) size * nmemb); - error = call_user_function(EG(function_table), NULL, t->func, retval, 3, argv TSRMLS_CC); + error = call_user_function(EG(function_table), NULL, t->func_name, retval, 3, argv TSRMLS_CC); if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION"); length = -1; @@ -501,7 +503,7 @@ zend_list_addref(ch->id); ZVAL_STRINGL(argv[1], data, length, 1); - error = call_user_function(EG(function_table), NULL, t->func, retval, 2, argv TSRMLS_CC); + error = call_user_function(EG(function_table), NULL, t->func_name, retval, 2, argv TSRMLS_CC); if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION"); length = -1; @@ -856,27 +858,30 @@ } break; case CURLOPT_WRITEFUNCTION: - if (ch->handlers->write->func) { - zval_ptr_dtor(&ch->handlers->write->func); + if (ch->handlers->write->func_name) { + zval_ptr_dtor(&ch->handlers->write->func_name); + ch->handlers->write->func_ptr = NULL; } zval_add_ref(zvalue); - ch->handlers->write->func = *zvalue; + ch->handlers->write->func_name = *zvalue; ch->handlers->write->method = PHP_CURL_USER; break; case CURLOPT_READFUNCTION: - if (ch->handlers->read->func) { - zval_ptr_dtor(&ch->handlers->read->func); + if (ch->handlers->read->func_name) { + zval_ptr_dtor(&ch->handlers->read->func_name); + ch->handlers->write->func_ptr = NULL; } zval_add_ref(zvalue); - ch->handlers->read->func = *zvalue; + ch->handlers->read->func_name = *zvalue; ch->handlers->read->method = PHP_CURL_USER; break; case CURLOPT_HEADERFUNCTION: - if (ch->handlers->write_header->func) { - zval_ptr_dtor(&ch->handlers->write_header->func); + if (ch->handlers->write_header->func_name) { + zval_ptr_dtor(&ch->handlers->write_header->func_name); + ch->handlers->write->func_ptr = NULL; } zval_add_ref(zvalue); - ch->handlers->write_header->func = *zvalue; + ch->handlers->write_header->func_name = *zvalue; ch->handlers->write_header->method = PHP_CURL_USER; break; case CURLOPT_PASSWDFUNCTION: @@ -1252,14 +1257,14 @@ zend_llist_clean(&ch->to_free.slist); zend_llist_clean(&ch->to_free.post); - if (ch->handlers->write->func) { - zval_ptr_dtor(&ch->handlers->write->func); + if (ch->handlers->write->func_name) { + zval_ptr_dtor(&ch->handlers->write->func_name); } - if (ch->handlers->read->func) { - zval_ptr_dtor(&ch->handlers->read->func); + if (ch->handlers->read->func_name) { + zval_ptr_dtor(&ch->handlers->read->func_name); } - if (ch->handlers->write_header->func) { - zval_ptr_dtor(&ch->handlers->write_header->func); + if (ch->handlers->write_header->func_name) { + zval_ptr_dtor(&ch->handlers->write_header->func_name); } if (ch->handlers->passwd) { zval_ptr_dtor(&ch->handlers->passwd); Index: php4/ext/curl/php_curl.h diff -u php4/ext/curl/php_curl.h:1.32 php4/ext/curl/php_curl.h:1.33 --- php4/ext/curl/php_curl.h:1.32 Sun Apr 27 18:15:19 2003 +++ php4/ext/curl/php_curl.h Wed May 21 19:15:28 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_curl.h,v 1.32 2003/04/27 22:15:19 sterling Exp $ */ +/* $Id: php_curl.h,v 1.33 2003/05/21 23:15:28 sterling Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -78,18 +78,20 @@ void _php_curl_multi_close(zend_rsrc_list_entry *); typedef struct { - zval *func; - FILE *fp; - smart_str buf; - int method; - int type; + zval *func_name; + zend_function *func_ptr; + FILE *fp; + smart_str buf; + int method; + int type; } php_curl_write; typedef struct { - zval *func; - FILE *fp; - long fd; - int method; + zval *func_name; + zend_function *func_ptr; + FILE *fp; + long fd; + int method; } php_curl_read; typedef struct {

« previous php.cvs (#21202) next »