void loc_set_cmdline(char **argv, int idx, int cnt);
void loc_set_file(const char *fname, int lno);
-void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
-void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
-void error_vprintf_unless_qmp(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
-void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
-void error_set_progname(const char *argv0);
+int error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
+int error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+int error_vprintf_unless_qmp(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
+int error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void error_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
void warn_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
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);
+
+void error_init(const char *argv0);
+
/*
* 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);