X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flog.c;h=1a6ea7e5a84fbb2b97303f2b2775ce4e62bfde80;hb=ce3fd7e72a1b101002617bd410031e65d290f56f;hp=79c63a18e715bd7d7e6c25c6af5fcb6c7c610041;hpb=c1072ea0dade39a4188de5e511adfffd4ba8e42c;p=elogind.git diff --git a/src/log.c b/src/log.c index 79c63a18e..1a6ea7e5a 100644 --- a/src/log.c +++ b/src/log.c @@ -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) {