This will allow new callers of vreport to specify that an errno value should be printed too. Update all existing callers.
We use strerror rather than strerror_r because strerror_r presents portability difficulties. Replacing strerror with strerror_r (or something else) is left to the future. No functional change yet. Signed-off-by: Ian Jackson <ian.jack...@eu.citrix.com> --- util/qemu-error.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/util/qemu-error.c b/util/qemu-error.c index a25d3b9..9acc4b5 100644 --- a/util/qemu-error.c +++ b/util/qemu-error.c @@ -191,12 +191,14 @@ bool enable_timestamp_msg; /* * Print a message to current monitor if we have one, else to stderr. * @report_type is the type of message: error, warning or informational. + * If @errnoval is nonnegative it is fed to strerror and printed too. * 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. */ -static void vreport(report_type type, const char *fmt, va_list ap) +static void vreport(report_type type, int errnoval, + const char *fmt, va_list ap) { GTimeVal tv; gchar *timestr; @@ -222,6 +224,11 @@ static void vreport(report_type type, const char *fmt, va_list ap) } error_vprintf(fmt, ap); + + if (errnoval >= 0) { + error_printf(": %s", strerror(errnoval)); + } + error_printf("\n"); } @@ -234,7 +241,7 @@ static void vreport(report_type type, const char *fmt, va_list ap) */ void error_vreport(const char *fmt, va_list ap) { - vreport(REPORT_TYPE_ERROR, fmt, ap); + vreport(REPORT_TYPE_ERROR, -1, fmt, ap); } /* @@ -246,7 +253,7 @@ void error_vreport(const char *fmt, va_list ap) */ void warn_vreport(const char *fmt, va_list ap) { - vreport(REPORT_TYPE_WARNING, fmt, ap); + vreport(REPORT_TYPE_WARNING, -1, fmt, ap); } /* @@ -259,7 +266,7 @@ void warn_vreport(const char *fmt, va_list ap) */ void info_vreport(const char *fmt, va_list ap) { - vreport(REPORT_TYPE_INFO, fmt, ap); + vreport(REPORT_TYPE_INFO, -1, fmt, ap); } /* @@ -274,7 +281,7 @@ void error_report(const char *fmt, ...) va_list ap; va_start(ap, fmt); - vreport(REPORT_TYPE_ERROR, fmt, ap); + vreport(REPORT_TYPE_ERROR, -1, fmt, ap); va_end(ap); } @@ -290,7 +297,7 @@ void warn_report(const char *fmt, ...) va_list ap; va_start(ap, fmt); - vreport(REPORT_TYPE_WARNING, fmt, ap); + vreport(REPORT_TYPE_WARNING, -1, fmt, ap); va_end(ap); } @@ -307,6 +314,6 @@ void info_report(const char *fmt, ...) va_list ap; va_start(ap, fmt); - vreport(REPORT_TYPE_INFO, fmt, ap); + vreport(REPORT_TYPE_INFO, -1, fmt, ap); va_end(ap); } -- 2.1.4