From 2df547bfd3caf93d36b3775f3e748ad52f6e422b Mon Sep 17 00:00:00 2001 From: Toon Schoenmakers Date: Wed, 16 Sep 2015 18:22:59 +0200 Subject: Initial support for setting an error handler as well --- zend/exception_handler.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'zend') diff --git a/zend/exception_handler.cpp b/zend/exception_handler.cpp index 51874a4..75361b2 100644 --- a/zend/exception_handler.cpp +++ b/zend/exception_handler.cpp @@ -43,6 +43,31 @@ Value set_exception_handler(const std::function &hand return output; } +Value set_error_handler(const std::function &handler) +{ + // create the functor which wraps our callback + Function functor(handler); + + // initialize our output value + Value output; + + // turn our user_error_handler into a Value if we have one, just so we can return it later on + if (EG(user_error_handler)) output = EG(user_error_handler); + + // detach so we have the zval + auto value = functor.detach(true); + + // alocate the user_error_handler + ALLOC_ZVAL(EG(user_error_handler)); + + // copy our zval into the user_error_handler + MAKE_COPY_ZVAL(&value, EG(user_error_handler)); + EG(user_error_handler_error_reporting) = (int) (E_ALL | E_STRICT); + + // return the original handler + return output; +} + /** * End of namespace */ -- cgit v1.2.3