Error reporting patches for 2016-03-16
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJW6S3sAAoJEDhwtADrkYZTkiwQALBidr34A8elkN/KEbH/n4dx skiQMjHgzyqUHRJOw3jgTZ5K+kiwA277PDsxj1RyHEQJ3MsgpX4znZows1i4UZNo plTPapATHAYYm7hTwaIyqXGUbwPXRTtCvyazBvXbqXa6F+Bc1N4ZX9DKDt58Pw35 klm26DD8elQqEdk5AE9piQr2kmISrhWp9kyX1PYBmzlEV4uMr7xLIvsybq44JFg9 rhXXFNJV3jRkDBBd51RbC3YWoPkAWaIdTR4er8y1/hr6naOHSAs5VJc3s93n4bjT 6yJCzOla0Rt7oZqFFoVLYW3lcs6XUbA087rvYXCiV0zceCbIbIcqMCIRnJgtSfJ9 qj1zDvw2Cm79FUvUswIBq1R09NFpmKQy8n1p1fOvGkku5eNyUuh7uKtLQns8fQr0 JIQDK2mHq96sZ+9YSgAdrEpCRPU9i/k/loU2U0tNOhcrU8u0HnXEEmI3tuHidnJ6 pgtB6brseWwNHvCLRAQpgWmAMv5ZiaFCWatJbE69vzfFLDqYPUmYGopUO/Mi2NI3 hWxay5UXAK1XkqkqvJ2E8hEef+wopu+h7xVBBxZ353oJ/Yb5YgpkQNuyMFaxIGq8 DrjoiM7EuODtc10JQ0VQ6Q8u6LrxQhVIcC/93E3EC06m7jgn9WIufENu0lMa+rjn XmxeDbw2IG1ict12lRCj =M1Oc -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2016-03-16' into staging Error reporting patches for 2016-03-16 # gpg: Signature made Wed 16 Mar 2016 09:57:00 GMT using RSA key ID EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" * remotes/armbru/tags/pull-error-2016-03-16: error: ensure errno detail is printed with error_abort Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
6aeda86890
40
util/error.c
40
util/error.c
@ -44,7 +44,8 @@ static void error_handle_fatal(Error **errp, Error *err)
|
||||
|
||||
static void error_setv(Error **errp,
|
||||
const char *src, int line, const char *func,
|
||||
ErrorClass err_class, const char *fmt, va_list ap)
|
||||
ErrorClass err_class, const char *fmt, va_list ap,
|
||||
const char *suffix)
|
||||
{
|
||||
Error *err;
|
||||
int saved_errno = errno;
|
||||
@ -56,6 +57,11 @@ static void error_setv(Error **errp,
|
||||
|
||||
err = g_malloc0(sizeof(*err));
|
||||
err->msg = g_strdup_vprintf(fmt, ap);
|
||||
if (suffix) {
|
||||
char *msg = err->msg;
|
||||
err->msg = g_strdup_printf("%s: %s", msg, suffix);
|
||||
g_free(msg);
|
||||
}
|
||||
err->err_class = err_class;
|
||||
err->src = src;
|
||||
err->line = line;
|
||||
@ -74,7 +80,7 @@ void error_set_internal(Error **errp,
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_setv(errp, src, line, func, err_class, fmt, ap);
|
||||
error_setv(errp, src, line, func, err_class, fmt, ap, NULL);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -85,7 +91,7 @@ void error_setg_internal(Error **errp,
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR, fmt, ap);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR, fmt, ap, NULL);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -94,7 +100,6 @@ void error_setg_errno_internal(Error **errp,
|
||||
int os_errno, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *msg;
|
||||
int saved_errno = errno;
|
||||
|
||||
if (errp == NULL) {
|
||||
@ -102,15 +107,10 @@ void error_setg_errno_internal(Error **errp,
|
||||
}
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR, fmt, ap);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR, fmt, ap,
|
||||
os_errno != 0 ? strerror(os_errno) : NULL);
|
||||
va_end(ap);
|
||||
|
||||
if (os_errno != 0) {
|
||||
msg = (*errp)->msg;
|
||||
(*errp)->msg = g_strdup_printf("%s: %s", msg, strerror(os_errno));
|
||||
g_free(msg);
|
||||
}
|
||||
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
@ -174,24 +174,22 @@ void error_setg_win32_internal(Error **errp,
|
||||
int win32_err, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *msg1, *msg2;
|
||||
char *suffix = NULL;
|
||||
|
||||
if (errp == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (win32_err != 0) {
|
||||
suffix = g_win32_error_message(win32_err);
|
||||
}
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR, fmt, ap);
|
||||
error_setv(errp, src, line, func, ERROR_CLASS_GENERIC_ERROR,
|
||||
fmt, ap, suffix);
|
||||
va_end(ap);
|
||||
|
||||
if (win32_err != 0) {
|
||||
msg1 = (*errp)->msg;
|
||||
msg2 = g_win32_error_message(win32_err);
|
||||
(*errp)->msg = g_strdup_printf("%s: %s (error: %x)", msg1, msg2,
|
||||
(unsigned)win32_err);
|
||||
g_free(msg2);
|
||||
g_free(msg1);
|
||||
}
|
||||
g_free(suffix);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user