cvs: php4 /ext/curl interface.c php_curl.h
| From: | Sterling Hughes | 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 {