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