X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flog.c;h=1a6ea7e5a84fbb2b97303f2b2775ce4e62bfde80;hb=ce3fd7e72a1b101002617bd410031e65d290f56f;hp=6caa5fad0b8c37bb6809948f9c0aab343164d287;hpb=5ba081b0fb02380cee4c2ff5bc7e05f869eb8415;p=elogind.git diff --git a/src/log.c b/src/log.c index 6caa5fad0..1a6ea7e5a 100644 --- a/src/log.c +++ b/src/log.c @@ -344,7 +344,7 @@ static int write_to_console( } if (highlight) - IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_ON); + IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_RED_ON); IOVEC_SET_STRING(iovec[n++], buffer); if (highlight) IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF); @@ -618,28 +618,27 @@ int log_meta( return r; } -void log_assert( - const char*file, - int line, - const char *func, - const char *format, ...) { - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +_noreturn_ static void log_assert(const char *text, const char *file, int line, const char *func, const char *format) { static char buffer[LINE_MAX]; - int saved_errno = errno; - va_list ap; - va_start(ap, format); - vsnprintf(buffer, sizeof(buffer), format, ap); - va_end(ap); + snprintf(buffer, sizeof(buffer), format, text, file, line, func); char_array_0(buffer); log_abort_msg = buffer; log_dispatch(LOG_CRIT, file, line, func, buffer); abort(); +} +#pragma GCC diagnostic pop - /* If the user chose to ignore this SIGABRT, we are happy to go on, as if nothing happened. */ - errno = saved_errno; +void log_assert_failed(const char *text, const char *file, int line, const char *func) { + log_assert(text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting."); +} + +void log_assert_failed_unreachable(const char *text, const char *file, int line, const char *func) { + log_assert(text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); } int log_set_target_from_string(const char *e) {