cvs: php4 /ext/com COM.c

From: Date: Thu, 02 May 2002 13:37:30 +0000
Subject: cvs: php4 /ext/com COM.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-11626@lists.php.net to get a copy of this message
phanto Thu May 2 09:37:30 2002 EDT Modified files: /php4/ext/com COM.c Log: remove temporary resources immediately return value fix #thanks to alan for 'remote debugging' Index: php4/ext/com/COM.c diff -u php4/ext/com/COM.c:1.69 php4/ext/com/COM.c:1.70 --- php4/ext/com/COM.c:1.69 Mon Apr 29 13:20:14 2002 +++ php4/ext/com/COM.c Thu May 2 09:37:30 2002 @@ -1439,34 +1439,38 @@ pval *object_handle; PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU); - if (!zend_is_true(return_value)) { - ZVAL_FALSE(object); - return; + if (zend_is_true(return_value)) { + ALLOC_ZVAL(object_handle); + *object_handle = *return_value; + pval_copy_constructor(object_handle); + INIT_PZVAL(object_handle); + zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); + pval_destructor(&function_name->element); + } else { + ZVAL_NULL(object); } - ALLOC_ZVAL(object_handle); - *object_handle = *return_value; - pval_copy_constructor(object_handle); - INIT_PZVAL(object_handle); - zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); - pval_destructor(&function_name->element); return; } + RETVAL_NULL(); property = php_COM_get_property_handler(property_reference); - if (Z_TYPE(property) == IS_NULL) { - if (property.refcount == 1) { - pval_destructor(&property); - } + + if (Z_TYPE(property) != IS_OBJECT) { + pval_destructor(&property); pval_destructor(&function_name->element); + + /* error message - function call on a non-object */ return; } + zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle); obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type); if (!obj || (type != IS_COM)) { pval_destructor(&property); pval_destructor(&function_name->element); + return; } @@ -1486,9 +1490,7 @@ arguments = (pval **) emalloc(sizeof(pval *)*arg_count); zend_get_parameters_array(ht, arg_count, arguments); - if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count TSRMLS_CC) == FAILURE) { - RETVAL_FALSE; - } else { + if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count TSRMLS_CC) == SUCCESS) { php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); } @@ -1496,9 +1498,12 @@ efree(arguments); } - if (property.refcount == 1) { + if (zend_llist_count(property_reference->elements_list) > 1) { + /* destruct temporary object */ + zend_list_delete(Z_LVAL_PP(handle)); pval_destructor(&property); } + pval_destructor(&function_name->element); }

« previous php.cvs (#11626) next »