X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fctf-writer%2Fassert-pre.h;h=c0a24614c10d90905b6fef7c85b6d77513e401e7;hb=34ae0d6283e68bfecdcc80f56ff174bb2f49c7fa;hp=8f66d514d6098bb4f6ccda2d70234efcf7919132;hpb=578e048b5debf169e286e5b5cc747b5d6c16886d;p=babeltrace.git diff --git a/src/ctf-writer/assert-pre.h b/src/ctf-writer/assert-pre.h index 8f66d514..c0a24614 100644 --- a/src/ctf-writer/assert-pre.h +++ b/src/ctf-writer/assert-pre.h @@ -25,27 +25,59 @@ */ /* - * The macros in this header use macros defined in - * . We don't want this header to - * automatically include because you - * need to manually define BT_LOG_TAG before including - * and it is unexpected that you - * also need to define it before including this header. - * - * This is a reminder that in order to use - * , you also need to use logging - * explicitly. + * The macros in this header use macros defined in "logging/log.h". We + * don't want this header to automatically include "logging/log.h" + * because you need to manually define BT_LOG_TAG before including + * "logging/log.h" and it is unexpected that you also need to define it + * before including this header. + * + * This is a reminder that in order to use "ctf-writer/assert-pre.h", + * you also need to use logging explicitly. */ -#ifndef BABELTRACE_LOGGING_INTERNAL_H -# error Include before this header. +#ifndef BT_LOG_SUPPORTED +# error Include "logging/log.h" before this header. #endif #include #include -#include "common/babeltrace.h" +#include "common/macros.h" #ifdef BT_DEV_MODE +/* + * Prints the details of an unsatisfied precondition without immediately + * aborting. You should use this within a function which checks + * preconditions, but which is called from a BT_CTF_ASSERT_PRE() + * context, so that the function can still return its result for + * BT_CTF_ASSERT_PRE() to evaluate it. + * + * Example: + * + * BT_CTF_ASSERT_PRE_FUNC + * static inline bool check_complex_precond(...) + * { + * ... + * + * if (...) { + * BT_CTF_ASSERT_PRE_MSG("Invalid object: ...", ...); + * return false; + * } + * + * ... + * } + * + * ... + * + * BT_CTF_ASSERT_PRE(check_complex_precond(...), + * "Precondition is not satisfied: ...", ...); + */ +# define BT_CTF_ASSERT_PRE_MSG(_fmt, ...) \ + do { \ + _bt_log_write_d(_BT_LOG_SRCLOC_FUNCTION, __FILE__, \ + __LINE__, BT_LOG_FATAL, BT_LOG_TAG, (_fmt), \ + ##__VA_ARGS__); \ + } while (0) + /* * Asserts that the library precondition _cond is satisfied. * @@ -58,9 +90,9 @@ # define BT_CTF_ASSERT_PRE(_cond, _fmt, ...) \ do { \ if (!(_cond)) { \ - BT_LOGF_STR("Library precondition not satisfied; error is:"); \ - BT_LOGF((_fmt), ##__VA_ARGS__); \ - BT_LOGF_STR("Aborting..."); \ + BT_CTF_ASSERT_PRE_MSG("CTF writer precondition not satisfied; error is:"); \ + BT_CTF_ASSERT_PRE_MSG((_fmt), ##__VA_ARGS__); \ + BT_CTF_ASSERT_PRE_MSG("Aborting..."); \ abort(); \ } \ } while (0) @@ -97,10 +129,9 @@ * BT_CTF_ASSERT_PRE(check_complex_precond(...), * "Precondition is not satisfied: ...", ...); */ -# define BT_CTF_ASSERT_PRE_MSG BT_LOGF #else # define BT_CTF_ASSERT_PRE(_cond, _fmt, ...) ((void) sizeof((void) (_cond), 0)) -# define BT_CTF_ASSERT_PRE_FUNC BT_UNUSED +# define BT_CTF_ASSERT_PRE_FUNC __attribute__((unused)) # define BT_CTF_ASSERT_PRE_MSG(_fmt, ...) #endif /* BT_DEV_MODE */