X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_misc.c;h=3ad9988955f279ff8e366d398ec41d5d41c2036e;hp=4115042312b1f328f1032b1a1bfec218880dc40c;hb=9da9c90ae841a731913fe3aec7463dced6378470;hpb=7ba90c6d9d6843549fb9227d1a7aa05033e60772 diff --git a/php_http_misc.c b/php_http_misc.c index 4115042..3ad9988 100644 --- a/php_http_misc.c +++ b/php_http_misc.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2011, Michael Wallner | + | Copyright (c) 2004-2013, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -142,16 +142,15 @@ int php_http_select_str(const char *cmp, int argc, ...) /* ARRAYS */ -PHP_HTTP_API unsigned php_http_array_list(zval *hash TSRMLS_DC, unsigned argc, ...) +PHP_HTTP_API unsigned php_http_array_list(HashTable *ht TSRMLS_DC, unsigned argc, ...) { - HashTable *ht = HASH_OF(hash); HashPosition pos; unsigned argl = 0; va_list argv; va_start(argv, argc); for ( zend_hash_internal_pointer_reset_ex(ht, &pos); - zend_hash_has_more_elements_ex(ht, &pos) && (argl < argc); + SUCCESS == zend_hash_has_more_elements_ex(ht, &pos) && (argl < argc); zend_hash_move_forward_ex(ht, &pos)) { zval **data, ***argp = (zval ***) va_arg(argv, zval ***); @@ -230,12 +229,6 @@ int php_http_array_apply_merge_func(void *pDest TSRMLS_DC, int num_args, va_list /* PASS CALLBACK */ -PHP_HTTP_API size_t php_http_pass_wrapper(php_http_pass_callback_arg_t *cb, const char *str, size_t len) -{ - TSRMLS_FETCH(); - return cb->cb_zts(cb->cb_arg, str, len TSRMLS_CC); -} - PHP_HTTP_API size_t php_http_pass_fcall_callback(void *cb_arg, const char *str, size_t len) { php_http_pass_fcall_arg_t *fcd = cb_arg; @@ -260,7 +253,7 @@ static inline int scope_error_handling(long type TSRMLS_DC) return EH_THROW; } - if (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), php_http_object_get_class_entry() TSRMLS_CC)) { + if (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), php_http_object_class_entry TSRMLS_CC)) { return php_http_object_get_error_handling(EG(This) TSRMLS_CC); } @@ -275,7 +268,7 @@ void php_http_error(long type TSRMLS_DC, long code, const char *format, ...) switch (scope_error_handling(type TSRMLS_CC)) { case EH_THROW: { char *message; - zend_class_entry *ce = php_http_exception_get_class_entry(); + zend_class_entry *ce = php_http_exception_class_entry; /* FIXME wat? */ if (0&& EG(exception_class) && instanceof_function(EG(exception_class), ce TSRMLS_CC)) { @@ -296,6 +289,34 @@ void php_http_error(long type TSRMLS_DC, long code, const char *format, ...) va_end(args); } +/* ZEND */ + +STATUS php_http_method_call(zval *object, const char *method_str, size_t method_len, int argc, zval **argv[], zval **retval_ptr TSRMLS_DC) +{ + zend_fcall_info fci; + zval zmethod; + zval *retval; + STATUS rv; + + fci.size = sizeof(fci); + fci.object_ptr = object; + fci.function_name = &zmethod; + fci.retval_ptr_ptr = retval_ptr ? retval_ptr : &retval; + fci.param_count = argc; + fci.params = argv; + fci.no_separation = 1; + fci.symbol_table = NULL; + fci.function_table = NULL; + + INIT_PZVAL(&zmethod); + ZVAL_STRINGL(&zmethod, method_str, method_len, 0); + rv = zend_call_function(&fci, NULL TSRMLS_CC); + + if (!retval_ptr && retval) { + zval_ptr_dtor(&retval); + } + return rv; +} /* * Local variables: * tab-width: 4