diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-12-10 17:01:10 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-12-10 17:01:10 +0000 |
commit | 80514f9c9bb86dbba761e4b026e5d62156ea112c (patch) | |
tree | 2dd06a646831d5da062f73543e5ac3909ac5fd97 | |
parent | 6e8df5f00a3874decf1e5542da3d65b25f6da1dc (diff) |
macro: log assertion at debug level in assert_return()
-rw-r--r-- | src/libsystemd-bus/bus-control.c | 1 | ||||
-rw-r--r-- | src/libsystemd-id128/sd-id128.c | 3 | ||||
-rw-r--r-- | src/login/sd-login.c | 2 | ||||
-rw-r--r-- | src/shared/log.c | 15 | ||||
-rw-r--r-- | src/shared/log.h | 6 | ||||
-rw-r--r-- | src/shared/macro.h | 10 |
6 files changed, 24 insertions, 13 deletions
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c index 966398944f..47e91118a4 100644 --- a/src/libsystemd-bus/bus-control.c +++ b/src/libsystemd-bus/bus-control.c @@ -27,7 +27,6 @@ #include <errno.h> #include "strv.h" - #include "sd-bus.h" #include "bus-internal.h" #include "bus-message.h" diff --git a/src/libsystemd-id128/sd-id128.c b/src/libsystemd-id128/sd-id128.c index 3fbad71a52..07d241534e 100644 --- a/src/libsystemd-id128/sd-id128.c +++ b/src/libsystemd-id128/sd-id128.c @@ -23,10 +23,9 @@ #include <fcntl.h> #include <unistd.h> -#include "sd-id128.h" - #include "util.h" #include "macro.h" +#include "sd-id128.h" _public_ char *sd_id128_to_string(sd_id128_t id, char s[33]) { unsigned n; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 7ae3db0397..c9a2e8a07f 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -28,10 +28,10 @@ #include "util.h" #include "cgroup-util.h" #include "macro.h" -#include "sd-login.h" #include "strv.h" #include "fileio.h" #include "login-shared.h" +#include "sd-login.h" _public_ int sd_pid_get_session(pid_t pid, char **session) { diff --git a/src/shared/log.c b/src/shared/log.c index 8f4995a0c8..2531e0da03 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -687,7 +687,7 @@ int log_meta_object( #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 void log_assert(int level, const char *text, const char *file, int line, const char *func, const char *format) { static char buffer[LINE_MAX]; snprintf(buffer, sizeof(buffer), format, text, file, line, func); @@ -695,17 +695,22 @@ _noreturn_ static void log_assert(const char *text, const char *file, int line, char_array_0(buffer); log_abort_msg = buffer; - log_dispatch(LOG_CRIT, file, line, func, NULL, NULL, buffer); - abort(); + log_dispatch(level, file, line, func, NULL, NULL, buffer); } #pragma GCC diagnostic pop _noreturn_ 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."); + log_assert(LOG_CRIT, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting."); + abort(); } _noreturn_ 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."); + log_assert(LOG_CRIT, text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); + abort(); +} + +void log_assert_failed_return(const char *text, const char *file, int line, const char *func) { + log_assert(LOG_DEBUG, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Ignoring."); } int log_oom_internal(const char *file, int line, const char *func) { diff --git a/src/shared/log.h b/src/shared/log.h index 0dc5c26100..de0e000371 100644 --- a/src/shared/log.h +++ b/src/shared/log.h @@ -136,6 +136,12 @@ _noreturn_ void log_assert_failed_unreachable( int line, const char *func); +void log_assert_failed_return( + const char *text, + const char *file, + int line, + const char *func); + #define log_full(level, ...) \ do { \ if (log_get_max_level() >= (level)) \ diff --git a/src/shared/macro.h b/src/shared/macro.h index 4198095011..fd3762eed4 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -153,10 +153,12 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { #define assert_cc(expr) struct UNIQUE(_assert_struct_) { char x[(expr) ? 0 : -1]; }; #endif -#define assert_return(expr, r) \ - do { \ - if (_unlikely_(!(expr))) \ - return (r); \ +#define assert_return(expr, r) \ + do { \ + if (_unlikely_(!(expr))) { \ + log_assert_failed_return(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \ + return (r); \ + } \ } while (false) #define PTR_TO_INT(p) ((int) ((intptr_t) (p))) |