[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions |
Date: |
Thu, 02 Aug 2012 18:57:03 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Luiz Capitulino <address@hidden> writes:
> The new argument is added to functions qerror_report() and error_set().
> It's stored in Error and QError. qerror_report_err() is also updated to
> take care of it.
>
> The QERR_ macros are changed to contain a place holder value for the
> new argument, so that the value is used on all current calls to
> qerror_report() and error_set() (and also to initialize qerror_table[]).
>
> Next commit will update the QERR_ macros with a proper ErrorClass
> value.
>
> Signed-off-by: Luiz Capitulino <address@hidden>
> ---
> error.c | 6 ++-
> error.h | 3 +-
> qerror.c | 10 +++--
> qerror.h | 145
> ++++++++++++++++++++++++++++++++-------------------------------
> 4 files changed, 88 insertions(+), 76 deletions(-)
>
> diff --git a/error.c b/error.c
> index 216cb08..6c8f7b8 100644
> --- a/error.c
> +++ b/error.c
> @@ -14,6 +14,7 @@
> #include "error.h"
> #include "qjson.h"
> #include "qdict.h"
> +#include "qapi-types.h"
> #include "error_int.h"
> #include "qerror.h"
>
> @@ -21,9 +22,10 @@ struct Error
> {
> QDict *obj;
> char *msg;
> + ErrorClass err_class;
> };
>
> -void error_set(Error **errp, const char *fmt, ...)
> +void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
> {
> Error *err;
> va_list ap;
> @@ -39,6 +41,7 @@ void error_set(Error **errp, const char *fmt, ...)
> err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
> va_end(ap);
> err->msg = qerror_format(fmt, err->obj);
> + err->err_class = err_class;
>
> *errp = err;
> }
> @@ -49,6 +52,7 @@ Error *error_copy(const Error *err)
>
> err_new = g_malloc0(sizeof(*err));
> err_new->msg = g_strdup(err->msg);
> + err_new->err_class = err->err_class;
> err_new->obj = err->obj;
> QINCREF(err_new->obj);
>
> diff --git a/error.h b/error.h
> index 3d038a5..905613a 100644
> --- a/error.h
> +++ b/error.h
> @@ -13,6 +13,7 @@
> #define ERROR_H
>
> #include "compiler.h"
> +#include "qapi-types.h"
> #include <stdbool.h>
>
> /**
> @@ -26,7 +27,7 @@ typedef struct Error Error;
> * Currently, qerror.h defines these error formats. This function is not
> * meant to be used outside of QEMU.
> */
> -void error_set(Error **err, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
> +void error_set(Error **err, ErrorClass err_class, const char *fmt, ...)
> GCC_FMT_ATTR(3, 4);
>
> /**
> * Returns true if an indirect pointer to an error is pointing to a valid
> diff --git a/qerror.c b/qerror.c
> index 664efb3..19a1902 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -386,13 +386,15 @@ static QDict *error_obj_from_fmt_no_fail(const char
> *fmt, va_list *va)
> *
> * Return strong reference.
> */
> -static QError *qerror_from_info(const char *fmt, va_list *va)
> +static QError *qerror_from_info(ErrorClass err_class, const char *fmt,
> + va_list *va)
> {
> QError *qerr;
>
> qerr = qerror_new();
> loc_save(&qerr->loc);
>
> + qerr->err_class = err_class;
> qerr->error = error_obj_from_fmt_no_fail(fmt, va);
> qerr->err_msg = qerror_format(fmt, qerr->error);
>
> @@ -518,13 +520,13 @@ static void qerror_print(QError *qerror)
> QDECREF(qstring);
> }
>
> -void qerror_report(const char *fmt, ...)
> +void qerror_report(ErrorClass eclass, const char *fmt, ...)
> {
> va_list va;
> QError *qerror;
>
> va_start(va, fmt);
> - qerror = qerror_from_info(fmt, &va);
> + qerror = qerror_from_info(eclass, fmt, &va);
> va_end(va);
>
> if (monitor_cur_is_qmp()) {
> @@ -540,6 +542,7 @@ struct Error
/* Evil... */
struct Error
> {
> QDict *obj;
> char *msg;
> + ErrorClass err_class;
> };
Evil indeed.
>
> void qerror_report_err(Error *err)
> @@ -551,6 +554,7 @@ void qerror_report_err(Error *err)
> QINCREF(err->obj);
> qerr->error = err->obj;
> qerr->err_msg = g_strdup(err->msg);
> + qerr->err_class = err->err_class;
>
> if (monitor_cur_is_qmp()) {
> monitor_set_error(cur_mon, qerr);
> diff --git a/qerror.h b/qerror.h
> index 2e6a49d..bcc93f8 100644
> --- a/qerror.h
> +++ b/qerror.h
> @@ -16,9 +16,11 @@
> #include "qstring.h"
> #include "qemu-error.h"
> #include "error.h"
> +#include "qapi-types.h"
> #include <stdarg.h>
>
> typedef struct QErrorStringTable {
> + ErrorClass err_class;
> const char *error_fmt;
> const char *desc;
> } QErrorStringTable;
> @@ -28,10 +30,11 @@ typedef struct QError {
> QDict *error;
> Location loc;
> char *err_msg;
> + ErrorClass err_class;
> } QError;
>
> QString *qerror_human(const QError *qerror);
> -void qerror_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void qerror_report(ErrorClass err_class, const char *fmt, ...)
> GCC_FMT_ATTR(2, 3);
> void qerror_report_err(Error *err);
> void assert_no_error(Error *err);
> char *qerror_format(const char *fmt, QDict *error);
> @@ -42,214 +45,214 @@ char *qerror_format(const char *fmt, QDict *error);
> * Use scripts/check-qerror.sh to check.
> */
> #define QERR_ADD_CLIENT_FAILED \
> - "{ 'class': 'AddClientFailed', 'data': {} }"
> + -1, "{ 'class': 'AddClientFailed', 'data': {} }"
The QERR_ macros now expand into two arguments, which isn't nice. But
it avoids a lot of churn.
I hope further clean up of the error reporting can get rid of the
macros.
[...]
- Re: [Qemu-devel] [PATCH 30/34] qemu-ga: switch to the new error format on the wire, (continued)
- [Qemu-devel] [PATCH 32/34] qerror: drop qerror_table and qerror_format(), Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 27/34] qerror: add proper ErrorClass value for QERR_ macros, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 28/34] error: add error_get_class(), Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 25/34] qerror: qerror_table: don't use C99 struct initializers, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 34/34] error, qerror: drop QDict member, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions, Luiz Capitulino, 2012/08/01
- Re: [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions,
Markus Armbruster <=
- [Qemu-devel] [PATCH 33/34] error: drop error_get_qobject()/error_set_qobject(), Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 24/34] qapi-schema: add ErrorClass enum, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 31/34] error, qerror: pass desc string to error calls, Luiz Capitulino, 2012/08/01
- Re: [Qemu-devel] [PATCH v1 00/34]: add new error format, Luiz Capitulino, 2012/08/02
- Re: [Qemu-devel] [PATCH v1 00/34]: add new error format, Markus Armbruster, 2012/08/02