diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/error.c | 37 | ||||
-rw-r--r-- | util/qemu-error.c | 8 | ||||
-rw-r--r-- | util/qemu-option.c | 4 |
3 files changed, 41 insertions, 8 deletions
diff --git a/util/error.c b/util/error.c index 80c89a2079..57303fd05c 100644 --- a/util/error.c +++ b/util/error.c @@ -122,6 +122,29 @@ void error_setg_file_open_internal(Error **errp, "Could not open '%s'", filename); } +void error_vprepend(Error **errp, const char *fmt, va_list ap) +{ + GString *newmsg; + + if (!errp) { + return; + } + + newmsg = g_string_new(NULL); + g_string_vprintf(newmsg, fmt, ap); + g_string_append(newmsg, (*errp)->msg); + (*errp)->msg = g_string_free(newmsg, 0); +} + +void error_prepend(Error **errp, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + error_vprepend(errp, fmt, ap); + va_end(ap); +} + void error_append_hint(Error **errp, const char *fmt, ...) { va_list ap; @@ -132,7 +155,7 @@ void error_append_hint(Error **errp, const char *fmt, ...) return; } err = *errp; - assert(err && errp != &error_abort); + assert(err && errp != &error_abort && errp != &error_fatal); if (!err->hint) { err->hint = g_string_new(NULL); @@ -204,11 +227,21 @@ void error_report_err(Error *err) { error_report("%s", error_get_pretty(err)); if (err->hint) { - error_printf_unless_qmp("%s\n", err->hint->str); + error_printf_unless_qmp("%s", err->hint->str); } error_free(err); } +void error_reportf_err(Error *err, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + error_vprepend(&err, fmt, ap); + va_end(ap); + error_report_err(err); +} + void error_free(Error *err) { if (err) { diff --git a/util/qemu-error.c b/util/qemu-error.c index c1574bb348..ecf5708478 100644 --- a/util/qemu-error.c +++ b/util/qemu-error.c @@ -200,8 +200,8 @@ static void error_print_loc(void) bool enable_timestamp_msg; /* * Print an error message to current monitor if we have one, else to stderr. - * Format arguments like vsprintf(). The result should not contain - * newlines. + * 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. */ @@ -224,8 +224,8 @@ 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 result should not contain - * newlines. + * 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. */ diff --git a/util/qemu-option.c b/util/qemu-option.c index a50eceae4a..a2d593ad2b 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -206,7 +206,7 @@ void parse_option_size(const char *name, const char *value, default: error_setg(errp, QERR_INVALID_PARAMETER_VALUE, name, "a size"); error_append_hint(errp, "You may use k, M, G or T suffixes for " - "kilobytes, megabytes, gigabytes and terabytes."); + "kilobytes, megabytes, gigabytes and terabytes.\n"); return; } } else { @@ -647,7 +647,7 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifier"); error_append_hint(errp, "Identifiers consist of letters, digits, " - "'-', '.', '_', starting with a letter."); + "'-', '.', '_', starting with a letter.\n"); return NULL; } opts = qemu_opts_find(list, id); |