35 lines
829 B
C
35 lines
829 B
C
|
|
#include "akerror.h"
|
||
|
|
#include "err_capture.h"
|
||
|
|
|
||
|
|
/*
|
||
|
|
* IGNORE deliberately swallows an error: it records the context in
|
||
|
|
* __akerr_last_ignored, logs it with an "IGNORED ERROR" marker, and lets
|
||
|
|
* execution continue.
|
||
|
|
*/
|
||
|
|
|
||
|
|
akerr_ErrorContext *boom(void)
|
||
|
|
{
|
||
|
|
PREPARE_ERROR(e);
|
||
|
|
FAIL_RETURN(e, AKERR_VALUE, "this error is ignored on purpose");
|
||
|
|
}
|
||
|
|
|
||
|
|
int main(void)
|
||
|
|
{
|
||
|
|
akerr_capture_install();
|
||
|
|
|
||
|
|
int reached_after_ignore = 0;
|
||
|
|
PREPARE_ERROR(e);
|
||
|
|
(void)e;
|
||
|
|
|
||
|
|
IGNORE(boom());
|
||
|
|
reached_after_ignore = 1;
|
||
|
|
|
||
|
|
AKERR_CHECK(__akerr_last_ignored != NULL);
|
||
|
|
AKERR_CHECK(__akerr_last_ignored->status == AKERR_VALUE);
|
||
|
|
AKERR_CHECK(reached_after_ignore == 1);
|
||
|
|
AKERR_CHECK_CONTAINS("IGNORED ERROR");
|
||
|
|
AKERR_CHECK_CONTAINS("this error is ignored on purpose");
|
||
|
|
fprintf(stderr, "err_ignore ok\n");
|
||
|
|
return 0;
|
||
|
|
}
|