1/*
2 * Copyright 2004, Axel D��rfler, axeld@pinc-software.de. All rights reserved.
3 * Copyright 2019, Haiku, Inc. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 */
6
7
8#undef NDEBUG
9	// just in case
10
11#include <OS.h>
12
13#include <assert.h>
14#include <signal.h>
15#include <stdio.h>
16#include <stdlib.h>
17#include <string.h>
18
19
20extern char* __progname;
21
22
23void
24__assert_fail(const char* assertion, const char* file, unsigned int line,
25	const char* function)
26{
27	fprintf(stderr, "%s: %s:%d:%s: %s\n", __progname, file, line, function,
28		assertion);
29
30	// If there's no handler installed for SIGABRT, call debugger().
31	struct sigaction signalAction;
32	if (sigaction(SIGABRT, NULL, &signalAction) == 0
33			&& signalAction.sa_handler == SIG_DFL) {
34		debugger(assertion);
35	}
36
37	abort();
38}
39
40
41void
42__assert_perror_fail(int error, const char* file, unsigned int line,
43	const char* function)
44{
45	__assert_fail(strerror(error), file, line, function);
46}
47