41 #ifndef __EST_ERROR_H__ 
   42 #define __EST_ERROR_H__ 
   61 #define MAX_ERROR_MESSAGE_LENGTH 1024 
   63 typedef void (*EST_error_handler)(
const char *format, ...);
 
   64 extern const char *EST_error_where;
 
   65 extern char *EST_error_message;
 
   67 extern EST_error_handler EST_bug_func;
 
   68 extern EST_error_handler EST_error_func;
 
   69 extern EST_error_handler EST_sys_error_func;
 
   70 extern EST_error_handler EST_warning_func;
 
   71 extern EST_error_handler old_error_function;
 
   72 extern EST_error_handler old_sys_error_function;
 
   74 extern FILE *EST_error_stream;
 
   75 extern FILE *EST_warning_stream;
 
   77 extern jmp_buf *est_errjmp;
 
   78 extern long errjmp_ok;
 
   80 extern void EST_errors_default();
 
   81 extern void EST_errors_quiet();
 
   83 void EST_quiet_error_fn(
const char *format, ...);
 
   84 void EST_quiet_sys_error_fn(
const char *format, ...);
 
   88 #define _rxp_s_(X) _rxp_S_(X) 
   90 #define EST_bug       (EST_error_where = __FILE__ ", line " _rxp_s_(__LINE__)),\ 
   93 #if defined(EST_DEBUGGING) 
   94 #define EST_exit(N) abort() 
   95 #define EST_error     (EST_error_where = __FILE__ ", line " _rxp_s_(__LINE__)),\ 
   97 #define EST_warning   (EST_error_where = __FILE__ ", line " _rxp_s_(__LINE__)),\ 
   99 #define EST_sys_error (EST_error_where = __FILE__ ", line " _rxp_s_(__LINE__)),\ 
  100               (*EST_sys_error_func) 
  103 #define EST_exit(N) exit(N) 
  104 #define EST_error     (EST_error_where = NULL),\ 
  106 #define EST_warning   (EST_error_where = NULL),\ 
  108 #define EST_sys_error (EST_error_where = NULL),\ 
  109               (*EST_sys_error_func) 
  112 #define est_error_throw() (est_errjmp ? longjmp(*est_errjmp,1) : (void)EST_exit(-1)) 
  113 #define est_error() est_error_throw() 
  115 #define CATCH_ERRORS_SKEL( INIT,CLEANUP) \ 
  118     jmp_buf *old_errjmp = est_errjmp; \ 
  119     int old_errjmp_ok = errjmp_ok; \ 
  121         est_errjmp = (jmp_buf *)malloc(sizeof(jmp_buf)); \ 
  122     int jmp_val = setjmp(*est_errjmp); \ 
  123     if (jmp_val) { free(est_errjmp); est_errjmp = old_errjmp;  errjmp_ok = old_errjmp_ok; CLEANUP} \ 
  126 #define CATCH_ERRORS() \ 
  128     const int est_err_quiet=0; \ 
  132 #define CATCH_ERRORS_QUIET() \ 
  134       const int est_err_quiet=1; \ 
  135       EST_error_handler old_error_function=EST_error_func; \ 
  136       EST_error_handler old_sys_error_function=EST_sys_error_func; \ 
  137       EST_error_func = EST_quiet_error_fn; \ 
  138       EST_sys_error_func = EST_quiet_sys_error_fn; \ 
  140       EST_error_func=old_error_function; \ 
  141       EST_sys_error_func=old_sys_error_function; \ 
  144 #define END_CATCH_ERRORS() \ 
  146            est_errjmp = old_errjmp; \ 
  147        errjmp_ok = old_errjmp_ok; \ 
  148            if (est_err_quiet) { \ 
  149         EST_error_func=old_error_function; \ 
  150          EST_sys_error_func=old_sys_error_function; \ 
  161 enum EST_error_behaviour
 
  167   est_errors_checked = 0,
 
  171   est_errors_allowed = 1,
 
  182 #include "EST_String.h" 
  188 inline const char *error_name(
const EST_String val) {
return val;}