__FBSDID("$FreeBSD: src/lib/libc/gen/assert.c,v 1.8 2007/01/09 00:27:53 imp Exp $");
#include <assert.h>
-#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
+#if __has_include(<CrashReporterClient.h>)
+#include <CrashReporterClient.h>
+#else
+#define CRGetCrashLogMessage() NULL
+#define CRSetCrashLogMessage(...)
+#endif
+#include "_simple.h"
void
-__assert(func, file, line, failedexpr)
+__assert_rtn(func, file, line, failedexpr)
const char *func, *file;
int line;
const char *failedexpr;
{
- if (func == NULL)
- (void)fprintf(stderr,
+ if (func == (const char *)-1L) {
+ /* 8462256: special case to replace __eprintf */
+ _simple_dprintf(STDERR_FILENO,
+ "%s:%d: failed assertion `%s'\n", file, line, failedexpr);
+ if (!CRGetCrashLogMessage()) {
+ _SIMPLE_STRING s = _simple_salloc();
+ if (s) {
+ _simple_sprintf(s,
+ "%s:%d: failed assertion `%s'\n",
+ file, line, failedexpr);
+ CRSetCrashLogMessage(_simple_string(s));
+ } else
+ CRSetCrashLogMessage(failedexpr);
+ }
+ } else if (func == NULL) {
+ _simple_dprintf(STDERR_FILENO,
"Assertion failed: (%s), file %s, line %d.\n", failedexpr,
file, line);
- else
- (void)fprintf(stderr,
+ if (!CRGetCrashLogMessage()) {
+ _SIMPLE_STRING s = _simple_salloc();
+ if (s) {
+ _simple_sprintf(s,
+ "Assertion failed: (%s), file %s, line %d.\n",
+ failedexpr, file, line);
+ CRSetCrashLogMessage(_simple_string(s));
+ } else
+ CRSetCrashLogMessage(failedexpr);
+ }
+ } else {
+ _simple_dprintf(STDERR_FILENO,
"Assertion failed: (%s), function %s, file %s, line %d.\n",
failedexpr, func, file, line);
+ if (!CRGetCrashLogMessage()) {
+ _SIMPLE_STRING s = _simple_salloc();
+ if (s) {
+ _simple_sprintf(s,
+ "Assertion failed: (%s), function %s, file %s, line %d.\n",
+ failedexpr, func, file, line);
+ CRSetCrashLogMessage(_simple_string(s));
+ } else
+ CRSetCrashLogMessage(failedexpr);
+ }
+ }
abort();
/* NOTREACHED */
}