Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- include/qapi/error.h | 22 ++++++++++++++++++++++ util/error.c | 6 +++--- 2 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/include/qapi/error.h b/include/qapi/error.h index f6f4fa0fac..551385aa91 100644 --- a/include/qapi/error.h +++ b/include/qapi/error.h @@ -297,6 +297,28 @@ void warn_report_err(Error *err); */ void error_report_err(Error *err); +/* + * Functions to clean Error **errp: call corresponding Error *err cleaning + * function an set pointer to NULL + */ +static inline void error_free_errp(Error **errp) +{ + error_free(*errp_in); + *errp_in = NULL; +} + +static inline void error_report_errp(Error **errp) +{ + error_report_err(*errp_in); + *errp_in = NULL; +} + +static inline void warn_report_errp(Error **errp) +{ + warn_report_err(*errp_in); + *errp_in = NULL; +} + /* * Convenience function to error_prepend(), warn_report() and free @err. */ diff --git a/util/error.c b/util/error.c index d4532ce318..dfba091757 100644 --- a/util/error.c +++ b/util/error.c @@ -273,9 +273,9 @@ void error_free(Error *err) void error_free_or_abort(Error **errp) { - assert(errp && *errp); - error_free(*errp); - *errp = NULL; + assert(errp_in && *errp_in); + error_free(*errp_in); + *errp_in = NULL; } void error_propagate(Error **dst_errp, Error *local_err) -- 2.21.0