42 {
43 va_list args;
45 char *msgptr = msg;
46
47 if (caller != nullptr) {
48
49 msgptr += sprintf(msgptr, "%s:", caller);
50 }
51
52 msgptr += sprintf(msgptr, "Error:%s", message);
53 if (format != nullptr) {
54 msgptr += sprintf(msgptr, ":");
55 va_start(args, format);
56#ifdef _WIN32
57
58 msgptr += _vsnprintf(msgptr,
MAX_MSG - 2 - (msgptr - msg), format, args);
60 strcat(msg, "\n");
61#else
62
63 msgptr += vsprintf(msgptr, format, args);
64
65 msgptr += sprintf(msgptr, "\n");
66#endif
67 va_end(args);
68 } else {
69
70 msgptr += sprintf(msgptr, "\n");
71 }
72
73
74 fprintf(stderr, "%s", msg);
75
76 switch (action) {
79 return;
82#if !defined(NDEBUG)
83
84
85
86# if defined(__GNUC__)
87 __builtin_trap();
88# else
89 *reinterpret_cast<int *>(0) = 0;
90# endif
91#endif
92 abort();
93 default:
95 }
96}
constexpr ERRCODE BADERRACTION("Illegal error action")