From c55510b72218a2d0b263eda006fd7aac1496b694 Mon Sep 17 00:00:00 2001 From: Cornelia Huck Date: Thu, 30 Aug 2018 16:59:01 +0200 Subject: qemu-error: add {error, warn}_report_once_cond Add two functions to print an error/warning report once depending on a passed-in condition variable and flip it if printed. This is useful if you want to print a message not once-globally, but e.g. once-per-device. Inspired by warn_once() in hw/vfio/ccw.c, which has been replaced with warn_report_once_cond(). Signed-off-by: Cornelia Huck Message-Id: <20180830145902.27376-2-cohuck@redhat.com> Reviewed-by: Markus Armbruster [Function comments reworded] Signed-off-by: Markus Armbruster --- include/qemu/error-report.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'include') diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index 72fab2b031..e415128ac4 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -44,6 +44,11 @@ void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); +bool error_report_once_cond(bool *printed, const char *fmt, ...) + GCC_FMT_ATTR(2, 3); +bool warn_report_once_cond(bool *printed, const char *fmt, ...) + GCC_FMT_ATTR(2, 3); + /* * Similar to error_report(), except it prints the message just once. * Return true when it prints, false otherwise. -- cgit v1.2.3 From c6c594596eabc80f6e54d96c56f01f8531d389b5 Mon Sep 17 00:00:00 2001 From: Cornelia Huck Date: Thu, 30 Aug 2018 16:59:02 +0200 Subject: qemu-error: make use of {error, warn}_report_once_cond {error,warn}_report_once() are a special case of the new functions and can simply switch to them. Signed-off-by: Cornelia Huck Message-Id: <20180830145902.27376-3-cohuck@redhat.com> Reviewed-by: Markus Armbruster [Dispense with unlikely() to keep the macros as simple as possible] Signed-off-by: Markus Armbruster --- include/qemu/error-report.h | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'include') diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index e415128ac4..0a8d9cc9ea 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -53,32 +53,22 @@ bool warn_report_once_cond(bool *printed, const char *fmt, ...) * Similar to error_report(), except it prints the message just once. * Return true when it prints, false otherwise. */ -#define error_report_once(fmt, ...) \ - ({ \ - static bool print_once_; \ - bool ret_print_once_ = !print_once_; \ - \ - if (!print_once_) { \ - print_once_ = true; \ - error_report(fmt, ##__VA_ARGS__); \ - } \ - unlikely(ret_print_once_); \ +#define error_report_once(fmt, ...) \ + ({ \ + static bool print_once_; \ + error_report_once_cond(&print_once_, \ + fmt, ##__VA_ARGS__); \ }) /* * Similar to warn_report(), except it prints the message just once. * Return true when it prints, false otherwise. */ -#define warn_report_once(fmt, ...) \ - ({ \ - static bool print_once_; \ - bool ret_print_once_ = !print_once_; \ - \ - if (!print_once_) { \ - print_once_ = true; \ - warn_report(fmt, ##__VA_ARGS__); \ - } \ - unlikely(ret_print_once_); \ +#define warn_report_once(fmt, ...) \ + ({ \ + static bool print_once_; \ + warn_report_once_cond(&print_once_, \ + fmt, ##__VA_ARGS__); \ }) const char *error_get_progname(void); -- cgit v1.2.3