diff options
author | Toon Schoenmakers <toon.schoenmakers@copernica.com> | 2015-09-16 18:22:59 +0200 |
---|---|---|
committer | Toon Schoenmakers <toon.schoenmakers@copernica.com> | 2015-09-16 18:22:59 +0200 |
commit | 2df547bfd3caf93d36b3775f3e748ad52f6e422b (patch) | |
tree | 6c349c4e21bf36eb3d1df5066db7789c6cd4c41e /zend | |
parent | fa9b3f12ef210e1321b739437e10d6c56f6796f3 (diff) |
Initial support for setting an error handler as well
Diffstat (limited to 'zend')
-rw-r--r-- | zend/exception_handler.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
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<Value(Parameters ¶ms)> &hand return output; } +Value set_error_handler(const std::function<Value(Parameters ¶ms)> &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 */ |