Changeset 903 in svn for trunk/utils.c
- Timestamp:
- 2012-06-11T07:25:22Z (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/utils.c
r875 r903 27 27 } while(0) 28 28 #endif 29 30 static void (*old_zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args) = NULL; 31 static void call_old_zend_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, ...) /* {{{ */ 32 { 33 va_list args; 34 va_start(args, format); 35 old_zend_error_cb(type, error_filename, error_lineno, format, args); 36 } 37 /* }}} */ 38 29 39 xc_compile_result_t *xc_compile_result_init(xc_compile_result_t *cr, /* {{{ */ 30 40 zend_op_array *op_array, … … 587 597 588 598 sandbox = (xc_sandbox_t *) XG(sandbox); 589 assert(sandbox != NULL); 599 if (!sandbox) { 600 old_zend_error_cb(type, error_filename, error_lineno, format, args); 601 return; 602 } 603 590 604 switch (type) { 591 605 #ifdef E_STRICT … … 614 628 /* give up, and user handler is not supported in this case */ 615 629 zend_uint i; 616 zend_uint orig_lineno = CG(zend_lineno); 617 zend_error_cb = sandbox->orig_zend_error_cb; 630 zend_uint old_lineno = CG(zend_lineno); 618 631 619 632 for (i = 0; i < sandbox->compilererror_cnt; i ++) { 620 633 compilererror = &sandbox->compilererrors[i]; 621 634 CG(zend_lineno) = compilererror->lineno; 622 zend_error(compilererror->type, "%s", compilererror->error); 623 } 624 CG(zend_lineno) = orig_lineno; 625 sandbox->compilererror_cnt = 0; 626 627 sandbox->orig_zend_error_cb(type, error_filename, error_lineno, format, args); 635 call_old_zend_error_cb(compilererror->type, error_filename, error_lineno, "%s", compilererror->error); 636 efree(compilererror->error); 637 } 638 if (sandbox->compilererrors) { 639 efree(sandbox->compilererrors); 640 sandbox->compilererrors = NULL; 641 } 642 sandbox->compilererror_cnt = 0; 643 sandbox->compilererror_size = 0; 644 645 CG(zend_lineno) = old_lineno; 646 old_zend_error_cb(type, error_filename, error_lineno, format, args); 628 647 break; 629 648 } … … 791 810 sandbox->compilererror_cnt = 0; 792 811 sandbox->compilererror_size = 0; 793 sandbox->orig_zend_error_cb = zend_error_cb;794 zend_error_cb = xc_sandbox_error_cb;795 812 #endif 796 813 … … 892 909 #ifdef XCACHE_ERROR_CACHING 893 910 EG(user_error_handler_error_reporting) = sandbox->orig_user_error_handler_error_reporting; 894 zend_error_cb = sandbox->orig_zend_error_cb;895 911 #endif 896 912 … … 1016 1032 1017 1033 #endif 1034 1035 /* init/destroy */ 1036 int xc_util_init(int module_number TSRMLS_DC) /* {{{ */ 1037 { 1038 #ifdef XCACHE_ERROR_CACHING 1039 old_zend_error_cb = zend_error_cb; 1040 zend_error_cb = xc_sandbox_error_cb; 1041 #endif 1042 1043 return SUCCESS; 1044 } 1045 /* }}} */ 1046 void xc_util_destroy() /* {{{ */ 1047 { 1048 #ifdef XCACHE_ERROR_CACHING 1049 if (zend_error_cb == xc_sandbox_error_cb) { 1050 zend_error_cb = old_zend_error_cb; 1051 } 1052 #endif 1053 } 1054 /* }}} */ 1055
Note: See TracChangeset
for help on using the changeset viewer.