xref: /openbmc/qemu/include/qemu/error-report.h (revision 756a98dd)
11de7afc9SPaolo Bonzini /*
21de7afc9SPaolo Bonzini  * Error reporting
31de7afc9SPaolo Bonzini  *
41de7afc9SPaolo Bonzini  * Copyright (C) 2010 Red Hat Inc.
51de7afc9SPaolo Bonzini  *
61de7afc9SPaolo Bonzini  * Authors:
71de7afc9SPaolo Bonzini  *  Markus Armbruster <armbru@redhat.com>,
81de7afc9SPaolo Bonzini  *
91de7afc9SPaolo Bonzini  * This work is licensed under the terms of the GNU GPL, version 2 or later.
101de7afc9SPaolo Bonzini  * See the COPYING file in the top-level directory.
111de7afc9SPaolo Bonzini  */
121de7afc9SPaolo Bonzini 
13121d0712SMarkus Armbruster #ifndef QEMU_ERROR_REPORT_H
14121d0712SMarkus Armbruster #define QEMU_ERROR_REPORT_H
151de7afc9SPaolo Bonzini 
161de7afc9SPaolo Bonzini typedef struct Location {
171de7afc9SPaolo Bonzini     /* all members are private to qemu-error.c */
181de7afc9SPaolo Bonzini     enum { LOC_NONE, LOC_CMDLINE, LOC_FILE } kind;
191de7afc9SPaolo Bonzini     int num;
201de7afc9SPaolo Bonzini     const void *ptr;
211de7afc9SPaolo Bonzini     struct Location *prev;
221de7afc9SPaolo Bonzini } Location;
231de7afc9SPaolo Bonzini 
241de7afc9SPaolo Bonzini Location *loc_push_restore(Location *loc);
251de7afc9SPaolo Bonzini Location *loc_push_none(Location *loc);
261de7afc9SPaolo Bonzini Location *loc_pop(Location *loc);
271de7afc9SPaolo Bonzini Location *loc_save(Location *loc);
281de7afc9SPaolo Bonzini void loc_restore(Location *loc);
291de7afc9SPaolo Bonzini void loc_set_none(void);
301de7afc9SPaolo Bonzini void loc_set_cmdline(char **argv, int idx, int cnt);
311de7afc9SPaolo Bonzini void loc_set_file(const char *fname, int lno);
321de7afc9SPaolo Bonzini 
33*9edc6313SMarc-André Lureau int error_vprintf(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0);
34*9edc6313SMarc-André Lureau int error_printf(const char *fmt, ...) G_GNUC_PRINTF(1, 2);
3597f40301SAlistair Francis 
36*9edc6313SMarc-André Lureau void error_vreport(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0);
37*9edc6313SMarc-André Lureau void warn_vreport(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0);
38*9edc6313SMarc-André Lureau void info_vreport(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0);
3997f40301SAlistair Francis 
40*9edc6313SMarc-André Lureau void error_report(const char *fmt, ...) G_GNUC_PRINTF(1, 2);
41*9edc6313SMarc-André Lureau void warn_report(const char *fmt, ...) G_GNUC_PRINTF(1, 2);
42*9edc6313SMarc-André Lureau void info_report(const char *fmt, ...) G_GNUC_PRINTF(1, 2);
4397f40301SAlistair Francis 
44c55510b7SCornelia Huck bool error_report_once_cond(bool *printed, const char *fmt, ...)
45*9edc6313SMarc-André Lureau     G_GNUC_PRINTF(2, 3);
46c55510b7SCornelia Huck bool warn_report_once_cond(bool *printed, const char *fmt, ...)
47*9edc6313SMarc-André Lureau     G_GNUC_PRINTF(2, 3);
48c55510b7SCornelia Huck 
49f5852efaSChristophe Fergeau void error_init(const char *argv0);
50f5852efaSChristophe Fergeau 
51bc6a69ddSPeter Xu /*
52bc6a69ddSPeter Xu  * Similar to error_report(), except it prints the message just once.
53bc6a69ddSPeter Xu  * Return true when it prints, false otherwise.
54bc6a69ddSPeter Xu  */
55bc6a69ddSPeter Xu #define error_report_once(fmt, ...)                     \
56bc6a69ddSPeter Xu     ({                                                  \
57bc6a69ddSPeter Xu         static bool print_once_;                        \
58c6c59459SCornelia Huck         error_report_once_cond(&print_once_,            \
59c6c59459SCornelia Huck                                fmt, ##__VA_ARGS__);     \
60bc6a69ddSPeter Xu     })
61bc6a69ddSPeter Xu 
62bc6a69ddSPeter Xu /*
63bc6a69ddSPeter Xu  * Similar to warn_report(), except it prints the message just once.
64bc6a69ddSPeter Xu  * Return true when it prints, false otherwise.
65bc6a69ddSPeter Xu  */
66bc6a69ddSPeter Xu #define warn_report_once(fmt, ...)                      \
67bc6a69ddSPeter Xu     ({                                                  \
68bc6a69ddSPeter Xu         static bool print_once_;                        \
69c6c59459SCornelia Huck         warn_report_once_cond(&print_once_,             \
70c6c59459SCornelia Huck                               fmt, ##__VA_ARGS__);      \
71bc6a69ddSPeter Xu     })
72bc6a69ddSPeter Xu 
73651d588fSStefan Hajnoczi extern bool message_with_timestamp;
742880ffb0SMario Smarduch extern bool error_with_guestname;
752880ffb0SMario Smarduch extern const char *error_guest_name;
761de7afc9SPaolo Bonzini 
771de7afc9SPaolo Bonzini #endif
78