@@ -1323,6 +1323,8 @@ static ZEND_COLD void zend_error_va_list(
1323
1323
}
1324
1324
#endif /* HAVE_DTRACE */
1325
1325
1326
+ zend_error_notify_all_callbacks (type , error_filename , error_lineno , format , args );
1327
+
1326
1328
/* if we don't have a user defined error handler */
1327
1329
if (Z_TYPE (EG (user_error_handler )) == IS_UNDEF
1328
1330
|| !(EG (user_error_handler_error_reporting ) & type )
@@ -1767,3 +1769,40 @@ ZEND_API void zend_map_ptr_extend(size_t last)
1767
1769
CG (map_ptr_last ) = last ;
1768
1770
}
1769
1771
}
1772
+
1773
+ static void zend_error_notify_callback_dtor (zend_error_notify_callback * callback )
1774
+ {
1775
+ }
1776
+
1777
+ int zend_startup_error_notify_callbacks ()
1778
+ {
1779
+ zend_llist_init (& zend_error_notify_callbacks , sizeof (zend_error_notify_callback ), (void (* )(void * )) zend_error_notify_callback_dtor , 1 );
1780
+
1781
+ return SUCCESS ;
1782
+ }
1783
+
1784
+ int zend_shutdown_error_notify_callbacks ()
1785
+ {
1786
+ zend_llist_destroy (& zend_error_notify_callbacks );
1787
+
1788
+ return SUCCESS ;
1789
+ }
1790
+
1791
+ void zend_register_error_notify_callback (const char * name , zend_error_notify_cb cb )
1792
+ {
1793
+ zend_error_notify_callback callback ;
1794
+ callback .name = name ;
1795
+ callback .notify_callback = cb ;
1796
+
1797
+ zend_llist_add_element (& zend_error_notify_callbacks , & callback );
1798
+ }
1799
+
1800
+ static void zend_error_notify_single_callback (zend_error_notify_callback * callback , int type , const char * error_filename , const uint32_t error_lineno , const char * format , va_list args )
1801
+ {
1802
+ callback -> notify_callback (type , error_filename , error_lineno , format , args );
1803
+ }
1804
+
1805
+ void zend_error_notify_all_callbacks (int type , const char * error_filename , const uint32_t error_lineno , const char * format , va_list args )
1806
+ {
1807
+ zend_llist_apply_with_arguments (& zend_error_notify_callbacks , (llist_apply_with_args_func_t ) zend_error_notify_single_callback , 5 , type , error_filename , error_lineno , format , args );
1808
+ }
0 commit comments