summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2004-01-10 11:43:42 +0000
committerZeev Suraski <zeev@php.net>2004-01-10 11:43:42 +0000
commita72c1ab93be75e9e206e6ba90fe04c2676110e72 (patch)
treecef95664063d174d351d325665b340304a05b375
parent170476d9ea72e004341d2034715199f21ae68ba9 (diff)
downloadphp-git-a72c1ab93be75e9e206e6ba90fe04c2676110e72.tar.gz
Added error mask to set_error_handler()
Patch by Christian Schneider <cschneid@cschneid.com>
-rw-r--r--Zend/zend_builtin_functions.c19
-rw-r--r--Zend/zend_execute_API.c4
-rw-r--r--Zend/zend_globals.h2
-rw-r--r--Zend/zend_operators.c5
4 files changed, 23 insertions, 7 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 57bc1dd0ce..45d5d81d33 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -934,19 +934,20 @@ ZEND_FUNCTION(trigger_error)
/* }}} */
-/* {{{ proto string set_error_handler(string error_handler)
+/* {{{ proto string set_error_handler(string error_handler [, int error_types])
Sets a user-defined error handler function. Returns the previously defined error handler, or false on error */
ZEND_FUNCTION(set_error_handler)
{
- zval **error_handler;
+ zval *error_handler;
zend_bool had_orig_error_handler=0;
char *error_handler_name = NULL;
+ long error_type = E_ALL;
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &error_handler)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &error_handler, &error_type) == FAILURE) {
+ return;
}
- if (!zend_is_callable(*error_handler, 0, &error_handler_name)) {
+ if (!zend_is_callable(error_handler, 0, &error_handler_name)) {
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);
@@ -958,17 +959,19 @@ ZEND_FUNCTION(set_error_handler)
had_orig_error_handler = 1;
*return_value = *EG(user_error_handler);
zval_copy_ctor(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 */
+ 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_handler;
+ EG(user_error_handler_error_reporting) = (int)error_type;
+ *EG(user_error_handler) = *error_handler;
zval_copy_ctor(EG(user_error_handler));
if (!had_orig_error_handler) {
@@ -988,6 +991,8 @@ ZEND_FUNCTION(restore_error_handler)
if (zend_ptr_stack_num_elements(&EG(user_error_handlers))==0) {
EG(user_error_handler) = NULL;
} else {
+ EG(user_error_handler_error_reporting) = zend_stack_int_top(&EG(user_error_handlers_error_reporting));
+ zend_stack_del_top(&EG(user_error_handlers_error_reporting));
EG(user_error_handler) = zend_ptr_stack_pop(&EG(user_error_handlers));
}
RETURN_TRUE;
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 5a55f091bd..127708b4fc 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -167,6 +167,7 @@ void init_executor(TSRMLS_D)
EG(current_execute_data) = NULL;
+ zend_stack_init(&EG(user_error_handlers_error_reporting));
zend_ptr_stack_init(&EG(user_error_handlers));
zend_ptr_stack_init(&EG(user_exception_handlers));
@@ -229,6 +230,8 @@ void shutdown_executor(TSRMLS_D)
FREE_ZVAL(zeh);
}
+ zend_stack_destroy(&EG(user_error_handlers_error_reporting));
+ zend_stack_init(&EG(user_error_handlers_error_reporting));
zend_ptr_stack_clean(&EG(user_error_handlers), ZVAL_DESTRUCTOR, 1);
zend_ptr_stack_clean(&EG(user_exception_handlers), ZVAL_DESTRUCTOR, 1);
} zend_end_try();
@@ -287,6 +290,7 @@ void shutdown_executor(TSRMLS_D)
zend_hash_destroy(&EG(included_files));
zend_ptr_stack_destroy(&EG(arg_types_stack));
+ zend_stack_destroy(&EG(user_error_handlers_error_reporting));
zend_ptr_stack_destroy(&EG(user_error_handlers));
zend_ptr_stack_destroy(&EG(user_exception_handlers));
zend_objects_store_destroy(&EG(objects_store));
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 0577ec1498..8408cb8916 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -214,8 +214,10 @@ struct _zend_executor_globals {
zval *garbage[2];
int garbage_ptr;
+ int user_error_handler_error_reporting;
zval *user_error_handler;
zval *user_exception_handler;
+ zend_stack user_error_handlers_error_reporting;
zend_ptr_stack user_error_handlers;
zend_ptr_stack user_exception_handlers;
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index c83fd08e03..2051235c7d 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -33,8 +33,13 @@
#include "ext/bcmath/number.h"
#endif
+<<<<<<< zend_operators.c
+#define LONG_SIGN_MASK (1L << (8*SIZEOF_LONG-1))
+
+=======
#define LONG_SIGN_MASK (1L << (8*sizeof(long)-1))
+>>>>>>> 1.162
ZEND_API int zend_atoi(const char *str, int str_len)
{
int retval;