From 2eee382a62a909d5a3f2f5eda94f30fe68fd5335 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 20 Jan 2012 13:41:10 +0000 Subject: initial import of the C runtime --- src/runtime/c/gu/assert.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/runtime/c/gu/assert.c (limited to 'src/runtime/c/gu/assert.c') diff --git a/src/runtime/c/gu/assert.c b/src/runtime/c/gu/assert.c new file mode 100644 index 000000000..e111912d3 --- /dev/null +++ b/src/runtime/c/gu/assert.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +const char* +gu_assert_mode_descs[] = { + [GU_ASSERT_PRECOND] = "precondition failed", + [GU_ASSERT_POSTCOND] = "postcondition failed", + [GU_ASSERT_ASSERTION] = "assertion failed", + [GU_ASSERT_NEVER] = "control should not reach here", +}; + +void +gu_abort_v_(GuAssertMode mode, + const char* file, const char* func, int line, + const char* msg_fmt, va_list args) +{ + const char* desc = gu_assert_mode_descs[mode]; + (void) fprintf(stderr, "%s (%s:%d): %s\n", func, file, line, desc); + if (msg_fmt != NULL) { + (void) fputc('\t', stderr); + (void) vfprintf(stderr, msg_fmt, args); + (void) fputc('\n', stderr); + } + abort(); +} + +void +gu_abort_(GuAssertMode mode, + const char* file, const char* func, int line, + const char* msg_fmt, ...) +{ + va_list args; + va_start(args, msg_fmt); + gu_abort_v_(mode, file, func, line, msg_fmt, args); + va_end(args); +} + + +void +gu_fatal(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fputs("Fatal error", stderr); + if (fmt) { + fputs(": ", stderr); + (void) vfprintf(stderr, fmt, args); + } + fputc('\n', stderr); + abort(); +} -- cgit v1.2.3