2026-01-04 22:56:31 -05:00
|
|
|
#include "akerror.h"
|
2026-07-29 17:09:45 -04:00
|
|
|
#include "err_capture.h"
|
2025-07-21 07:19:41 -04:00
|
|
|
|
2026-01-10 10:20:35 -05:00
|
|
|
akerr_ErrorContext *func2(void)
|
2025-07-21 07:19:41 -04:00
|
|
|
{
|
|
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
2026-01-10 10:20:35 -05:00
|
|
|
FAIL(errctx, AKERR_NULLPOINTER, "This is a failure in func2");
|
2025-07-21 07:19:41 -04:00
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
SUCCEED_RETURN(errctx);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-10 10:20:35 -05:00
|
|
|
akerr_ErrorContext *func1(void)
|
2025-07-21 07:19:41 -04:00
|
|
|
{
|
|
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
|
|
|
|
CATCH(errctx, func2());
|
|
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
SUCCEED_RETURN(errctx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
|
|
|
|
CATCH(errctx, func1());
|
|
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
2026-01-10 10:20:35 -05:00
|
|
|
} HANDLE(errctx, AKERR_NULLPOINTER) {
|
2026-07-29 17:09:45 -04:00
|
|
|
AKERR_CHECK_STATUS(errctx, AKERR_NULLPOINTER);
|
|
|
|
|
akerr_log_method("Caught exception");
|
2025-07-21 07:19:41 -04:00
|
|
|
} FINISH_NORETURN(errctx);
|
2026-07-29 17:09:45 -04:00
|
|
|
|
|
|
|
|
AKERR_CHECK(akerr_slots_in_use() == 0);
|
|
|
|
|
fprintf(stderr, "err_catch ok\n");
|
|
|
|
|
return 0;
|
2025-07-21 07:19:41 -04:00
|
|
|
}
|