cvs: php4 /main output.c

From: Date: Sun, 25 Aug 2002 11:50:26 +0000
Subject: cvs: php4 /main output.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-13660@lists.php.net to get a copy of this message
helly Sun Aug 25 07:50:26 2002 EDT Modified files: /php4/main output.c Log: Reenable array(object,method) in ob_start() Index: php4/main/output.c diff -u php4/main/output.c:1.116 php4/main/output.c:1.117 --- php4/main/output.c:1.116 Fri Aug 23 04:37:35 2002 +++ php4/main/output.c Sun Aug 25 07:50:25 2002 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: output.c,v 1.116 2002/08/23 08:37:35 zeev Exp $ */ +/* $Id: output.c,v 1.117 2002/08/25 11:50:25 helly Exp $ */ #include "php.h" #include "ext/standard/head.h" @@ -480,6 +480,34 @@ } /* }}} */ +/* {{{ php_check_object_method_array + * This function set *name to the 'object->method()' of NULL if given. + * The callee must free that result using efree() function. + */ +static int php_check_object_method_array(HashTable *ht, char **name) +{ + if (zend_hash_num_elements(ht)>1) { + zval **object, **method; + + if (zend_hash_index_find(ht, 0, (void **) &object)!=FAILURE + && zend_hash_index_find(ht, 1, (void **) &method)!=FAILURE) + { + if ((*object)->type == IS_OBJECT + && (*method)->type == IS_STRING) + { + if (*name) { + spprintf(name, 0, "%s->%s()", Z_OBJCE_PP(object)->name, Z_STRVAL_PP(method)); + } + return 1; + } + } + } + if (*name) + *name = NULL; + return 0; +} +/* }}} */ + /* {{{ php_ob_init */ static int php_ob_init(uint initial_size, uint block_size, zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC) @@ -517,10 +545,18 @@ } else if (output_handler && output_handler->type == IS_ARRAY) { result = 0; - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(output_handler), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_P(output_handler), (void **)&tmp, &pos) == SUCCESS) { - result &= php_ob_init(initial_size, block_size, *tmp, chunk_size, erase TSRMLS_CC); - zend_hash_move_forward_ex(Z_ARRVAL_P(output_handler), &pos); + /* do we have array(object,method) */ + if (php_check_object_method_array(Z_ARRVAL_P(output_handler), &handler_name)) { + SEPARATE_ZVAL(&output_handler); + output_handler->refcount++; + result = php_ob_init_named(initial_size, block_size, handler_name, output_handler, chunk_size, erase TSRMLS_CC); + efree(handler_name); + } else { + zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(output_handler), &pos); + while (zend_hash_get_current_data_ex(Z_ARRVAL_P(output_handler), (void **)&tmp, &pos) == SUCCESS) { + result &= php_ob_init(initial_size, block_size, *tmp, chunk_size, erase TSRMLS_CC); + zend_hash_move_forward_ex(Z_ARRVAL_P(output_handler), &pos); + } } result = result ? SUCCESS : FAILURE; }

« previous php.cvs (#13660) next »