diff options
| author | Xinchen Hui <laruence@gmail.com> | 2012-03-24 19:26:27 +0800 | 
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2012-03-24 19:26:27 +0800 | 
| commit | 872fdd153e69f3028750215f226769f2af399078 (patch) | |
| tree | 4b1bf4837f7ace8720a558c8d305ad26c25c98be /Zend/zend_builtin_functions.c | |
| parent | 88a8085aa3ae4ce3928d0309a3c5530e7483a134 (diff) | |
| parent | 9c99a89e8e2f740b96e3f8b423c0ce6702cc3be6 (diff) | |
| download | php-git-872fdd153e69f3028750215f226769f2af399078.tar.gz | |
Merge branch 'PHP-5.3' of ../php-5.3 into PHP-5.4
Diffstat (limited to 'Zend/zend_builtin_functions.c')
| -rw-r--r-- | Zend/zend_builtin_functions.c | 93 | 
1 files changed, 45 insertions, 48 deletions
| diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index f8d467478c..eab98ed944 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1512,6 +1512,7 @@ ZEND_FUNCTION(trigger_error)  ZEND_FUNCTION(set_error_handler)  {  	zval *error_handler; +	zend_bool had_orig_error_handler=0;  	char *error_handler_name = NULL;  	long error_type = E_ALL; @@ -1519,41 +1520,38 @@ ZEND_FUNCTION(set_error_handler)  		return;  	} -	if (IS_NULL != Z_TYPE_P(error_handler)) { -	    zend_bool had_orig_error_handler = 0; -		if (!zend_is_callable(error_handler, 0, &error_handler_name TSRMLS_CC)) { -			zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback", -					get_active_function_name(TSRMLS_C), error_handler_name?error_handler_name:"unknown"); -			efree(error_handler_name); -			return; -		} +	if (!zend_is_callable(error_handler, 0, &error_handler_name TSRMLS_CC)) { +		zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback", +				   get_active_function_name(TSRMLS_C), error_handler_name?error_handler_name:"unknown");  		efree(error_handler_name); +		return; +	} +	efree(error_handler_name); -		if (EG(user_error_handler)) { -			had_orig_error_handler = 1; -			*return_value = *EG(user_error_handler); -			zval_copy_ctor(return_value); -			INIT_PZVAL(return_value); -			zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting))); -			zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler)); -		} - -		ALLOC_ZVAL(EG(user_error_handler)); -		EG(user_error_handler_error_reporting) = (int)error_type; -		MAKE_COPY_ZVAL(&error_handler, EG(user_error_handler)); - -		if (!had_orig_error_handler) { -			RETURN_NULL(); -		} -	} else { /* unset user-defined handler */ -		if (EG(user_error_handler)) { -			zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting))); -			zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler)); -		} +	if (EG(user_error_handler)) { +		had_orig_error_handler = 1; +		*return_value = *EG(user_error_handler); +		zval_copy_ctor(return_value); +		INIT_PZVAL(return_value); +		zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting))); +		zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler)); +	} +	ALLOC_ZVAL(EG(user_error_handler)); +	if (!zend_is_true(error_handler)) { /* unset user-defined handler */ +		FREE_ZVAL(EG(user_error_handler));  		EG(user_error_handler) = NULL;  		RETURN_TRUE;  	} + +	EG(user_error_handler_error_reporting) = (int)error_type; +	*EG(user_error_handler) = *error_handler; +	zval_copy_ctor(EG(user_error_handler)); +	INIT_PZVAL(EG(user_error_handler)); + +	if (!had_orig_error_handler) { +		RETURN_NULL(); +	}  }  /* }}} */ @@ -1587,42 +1585,41 @@ ZEND_FUNCTION(set_exception_handler)  {  	zval *exception_handler;  	char *exception_handler_name = NULL; +	zend_bool had_orig_exception_handler=0;  	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &exception_handler) == FAILURE) {  		return;  	}  	if (Z_TYPE_P(exception_handler) != IS_NULL) { /* NULL == unset */ -		zend_bool had_orig_exception_handler = 0; -  		if (!zend_is_callable(exception_handler, 0, &exception_handler_name TSRMLS_CC)) {  			zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback", -					get_active_function_name(TSRMLS_C), exception_handler_name?exception_handler_name:"unknown"); +					   get_active_function_name(TSRMLS_C), exception_handler_name?exception_handler_name:"unknown");  			efree(exception_handler_name);  			return;  		}  		efree(exception_handler_name); +	} -		if (EG(user_exception_handler)) { -			had_orig_exception_handler = 1; -			*return_value = *EG(user_exception_handler); -			zval_copy_ctor(return_value); -			zend_ptr_stack_push(&EG(user_exception_handlers), EG(user_exception_handler)); -		} - -		ALLOC_ZVAL(EG(user_exception_handler)); -		MAKE_COPY_ZVAL(&exception_handler, EG(user_exception_handler)); +	if (EG(user_exception_handler)) { +		had_orig_exception_handler = 1; +		*return_value = *EG(user_exception_handler); +		zval_copy_ctor(return_value); +		zend_ptr_stack_push(&EG(user_exception_handlers), EG(user_exception_handler)); +	} +	ALLOC_ZVAL(EG(user_exception_handler)); -		if (!had_orig_exception_handler) { -			RETURN_NULL(); -		} -	} else { -		if (EG(user_exception_handler)) { -			zend_ptr_stack_push(&EG(user_exception_handlers), EG(user_exception_handler)); -		} +	if (Z_TYPE_P(exception_handler) == IS_NULL) { /* unset user-defined handler */ +		FREE_ZVAL(EG(user_exception_handler));  		EG(user_exception_handler) = NULL;  		RETURN_TRUE;  	} + +	MAKE_COPY_ZVAL(&exception_handler, EG(user_exception_handler)) + +	if (!had_orig_exception_handler) { +		RETURN_NULL(); +	}  }  /* }}} */ | 
