diff options
Diffstat (limited to 'libical/src/libical/icalerror.c')
-rw-r--r-- | libical/src/libical/icalerror.c | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/libical/src/libical/icalerror.c b/libical/src/libical/icalerror.c index e9641efc6a..13c39dadbc 100644 --- a/libical/src/libical/icalerror.c +++ b/libical/src/libical/icalerror.c @@ -59,14 +59,66 @@ int icalerror_errors_are_fatal = 1; int icalerror_errors_are_fatal = 0; #endif +struct icalerror_state { + icalerrorenum error; + icalerrorstate state; +}; + +struct icalerror_state error_state_map[] = +{ + { ICAL_BADARG_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_NEWFAILED_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_PARSE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_INTERNAL_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_FILE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_ALLOCATION_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_USAGE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_MULTIPLEINCLUSION_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_TIMEDOUT_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_UNKNOWN_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_NO_ERROR,ICAL_ERROR_DEFAULT} + +}; + +void icalerror_set_error_state( icalerrorenum error, + icalerrorstate state) +{ + int i; + + for(i = ICAL_BADARG_ERROR; error_state_map[i].error!= ICAL_NO_ERROR;i++){ + if(error_state_map[i].error == error){ + error_state_map[i].state = state; + } + } +} + +icalerrorstate icalerror_get_error_state( icalerrorenum error) +{ + int i; + + for(i = ICAL_BADARG_ERROR; error_state_map[i].error!= ICAL_NO_ERROR;i++){ + if(error_state_map[i].error == error){ + return error_state_map[i].state; + } + } + + return ICAL_ERROR_UNKNOWN; +} + + void icalerror_set_errno(icalerrorenum e) { - + icalerrorstate es; + icalerrno = e; - icalerror_stop_here(); + es = icalerror_get_error_state(e); - if(icalerror_errors_are_fatal == 1){ + icalerror_stop_here(); + if( (es == ICAL_ERROR_FATAL) || + (es == ICAL_ERROR_DEFAULT && icalerror_errors_are_fatal == 1)){ + fprintf(stderr,"libical: icalerrno_set_error: %s\n",icalerror_strerror(e)); #ifdef NDEBUG icalerror_crash_here(); @@ -74,8 +126,6 @@ void icalerror_set_errno(icalerrorenum e) { assert(0); #endif } - - } |