error: Functions to report warnings and informational messages
Add warn_report(), warn_vreport() for reporting warnings, and info_report(), info_vreport() for informational messages. These are implemented them with a helper function factored out of error_vreport(), suitably generalized. This patch makes no changes to the output of the original error_report() function. Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <c89e9980019f296ec9aa38d7689ac4d5c369296d.1499866456.git.alistair.francis@xilinx.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
beeb175c0d
commit
97f40301f1
@ -35,8 +35,15 @@ 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);
|
||||
|
||||
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 info_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
|
||||
|
||||
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);
|
||||
|
||||
const char *error_get_progname(void);
|
||||
extern bool enable_timestamp_msg;
|
||||
|
||||
|
@ -2535,7 +2535,11 @@ sub process {
|
||||
error_prepend|
|
||||
error_reportf_err|
|
||||
error_vreport|
|
||||
error_report}x;
|
||||
warn_vreport|
|
||||
info_vreport|
|
||||
error_report|
|
||||
warn_report|
|
||||
info_report}x;
|
||||
|
||||
if ($rawline =~ /\b(?:$qemu_error_funcs)\s*\(.*\".*\\n/) {
|
||||
ERROR("Error messages should not contain newlines\n" . $herecurr);
|
||||
|
@ -14,6 +14,16 @@
|
||||
#include "monitor/monitor.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
/*
|
||||
* @report_type is the type of message: error, warning or
|
||||
* informational.
|
||||
*/
|
||||
typedef enum {
|
||||
REPORT_TYPE_ERROR,
|
||||
REPORT_TYPE_WARNING,
|
||||
REPORT_TYPE_INFO,
|
||||
} report_type;
|
||||
|
||||
void error_printf(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
@ -179,17 +189,29 @@ static void print_loc(void)
|
||||
|
||||
bool enable_timestamp_msg;
|
||||
/*
|
||||
* Print an error message to current monitor if we have one, else to stderr.
|
||||
* Print a message to current monitor if we have one, else to stderr.
|
||||
* @report_type is the type of message: error, warning or informational.
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void error_vreport(const char *fmt, va_list ap)
|
||||
static void vreport(report_type type, const char *fmt, va_list ap)
|
||||
{
|
||||
GTimeVal tv;
|
||||
gchar *timestr;
|
||||
|
||||
switch (type) {
|
||||
case REPORT_TYPE_ERROR:
|
||||
break;
|
||||
case REPORT_TYPE_WARNING:
|
||||
error_printf("warning: ");
|
||||
break;
|
||||
case REPORT_TYPE_INFO:
|
||||
error_printf("info: ");
|
||||
break;
|
||||
}
|
||||
|
||||
if (enable_timestamp_msg && !cur_mon) {
|
||||
g_get_current_time(&tv);
|
||||
timestr = g_time_val_to_iso8601(&tv);
|
||||
@ -204,8 +226,45 @@ void error_vreport(const char *fmt, va_list ap)
|
||||
|
||||
/*
|
||||
* Print an error message to current monitor if we have one, else to stderr.
|
||||
* Format arguments like sprintf(). The resulting message should be a
|
||||
* single phrase, with no newline or trailing punctuation.
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void error_vreport(const char *fmt, va_list ap)
|
||||
{
|
||||
vreport(REPORT_TYPE_ERROR, fmt, ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print a warning message to current monitor if we have one, else to stderr.
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void warn_vreport(const char *fmt, va_list ap)
|
||||
{
|
||||
vreport(REPORT_TYPE_WARNING, fmt, ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print an information message to current monitor if we have one, else to
|
||||
* stderr.
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void info_vreport(const char *fmt, va_list ap)
|
||||
{
|
||||
vreport(REPORT_TYPE_INFO, fmt, ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print an error message to current monitor if we have one, else to stderr.
|
||||
* Format arguments like sprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
@ -214,6 +273,39 @@ void error_report(const char *fmt, ...)
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_vreport(fmt, ap);
|
||||
vreport(REPORT_TYPE_ERROR, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print a warning message to current monitor if we have one, else to stderr.
|
||||
* Format arguments like sprintf(). The resulting message should be a
|
||||
* single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void warn_report(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vreport(REPORT_TYPE_WARNING, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print an information message to current monitor if we have one, else to
|
||||
* stderr.
|
||||
* Format arguments like sprintf(). The resulting message should be a
|
||||
* single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void info_report(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vreport(REPORT_TYPE_INFO, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user