makes it possible to copy error_abort pointers, not just pass them on directly.
Signed-off-by: Michael S. Tsirkin <m...@redhat.com> --- util/error.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/util/error.c b/util/error.c index 14f4351..ccf29ea 100644 --- a/util/error.c +++ b/util/error.c @@ -20,7 +20,13 @@ struct Error ErrorClass err_class; }; -Error *error_abort; +static Error error_abort_st = { .err_class = ERROR_CLASS_MAX }; +Error *error_abort = &error_abort_st; + +static bool error_is_abort(Error **errp) +{ + return errp && *errp && (*errp)->err_class == ERROR_CLASS_MAX; +} void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) { @@ -40,7 +46,7 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) va_end(ap); err->err_class = err_class; - if (errp == &error_abort) { + if (error_is_abort(errp)) { error_report_err(err); abort(); } @@ -76,7 +82,7 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class, va_end(ap); err->err_class = err_class; - if (errp == &error_abort) { + if (error_is_abort(errp)) { error_report_err(err); abort(); } @@ -121,7 +127,7 @@ void error_set_win32(Error **errp, int win32_err, ErrorClass err_class, va_end(ap); err->err_class = err_class; - if (errp == &error_abort) { + if (error_is_abort(errp)) { error_report_err(err); abort(); } @@ -168,7 +174,7 @@ void error_free(Error *err) void error_propagate(Error **dst_errp, Error *local_err) { - if (local_err && dst_errp == &error_abort) { + if (local_err && error_is_abort(dst_errp)) { error_report_err(local_err); abort(); } else if (dst_errp && !*dst_errp) { -- MST