Luiz Capitulino <lcapitul...@redhat.com> writes:

> This commit changes all QERR_ macros to contain a human message (ie.
> the desc string found in qerr_table[]) instead of a json dictionary
> in string format.
>
> Before this commit, error_set() and qerror_report() would receive
> a json dictionary in string format and build a qobject from it. Now,
> both function receive a human message instead and the qobject is
> not built anymore.
>
> Signed-off-by: Luiz Capitulino <lcapitul...@redhat.com>
> ---
>  error.c  |   5 ++-
>  qerror.c |  44 ++------------------
>  qerror.h | 141 
> +++++++++++++++++++++++++++++++--------------------------------
>  3 files changed, 76 insertions(+), 114 deletions(-)
>
> diff --git a/error.c b/error.c
> index 15a2d06..740824c 100644
> --- a/error.c
> +++ b/error.c
> @@ -29,6 +29,7 @@ void error_set(Error **errp, ErrorClass err_class, const 
> char *fmt, ...)
>  {
>      Error *err;
>      va_list ap;
> +    char msg[2048];
>  
>      if (errp == NULL) {
>          return;
> @@ -38,9 +39,9 @@ void error_set(Error **errp, ErrorClass err_class, const 
> char *fmt, ...)
>      err = g_malloc0(sizeof(*err));
>  
>      va_start(ap, fmt);
> -    err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
> +    vsnprintf(msg, sizeof(msg), fmt, ap);
>      va_end(ap);
> -    err->msg = qerror_format(fmt, err->obj);
> +    err->msg = g_strdup(msg);

Suggest

       err->msg = g_strdup_vprintf(fmt, ap);

>      err->err_class = err_class;
>  
>      *errp = err;
> diff --git a/qerror.c b/qerror.c
> index 19a1902..db6bb47 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -342,45 +342,6 @@ static QError *qerror_new(void)
>      return qerr;
>  }
>  
> -static QDict *error_obj_from_fmt_no_fail(const char *fmt, va_list *va)
> -{
> -    QObject *obj;
> -    QDict *ret;
> -
> -    obj = qobject_from_jsonv(fmt, va);
> -    if (!obj) {
> -        fprintf(stderr, "invalid json in error dict '%s'\n", fmt);
> -        abort();
> -    }
> -    if (qobject_type(obj) != QTYPE_QDICT) {
> -        fprintf(stderr, "error is not a dict '%s'\n", fmt);
> -        abort();
> -    }
> -
> -    ret = qobject_to_qdict(obj);
> -    obj = qdict_get(ret, "class");
> -    if (!obj) {
> -        fprintf(stderr, "missing 'class' key in '%s'\n", fmt);
> -        abort();
> -    }
> -    if (qobject_type(obj) != QTYPE_QSTRING) {
> -        fprintf(stderr, "'class' key value should be a string in '%s'\n", 
> fmt);
> -        abort();
> -    }
> -
> -    obj = qdict_get(ret, "data");
> -    if (!obj) {
> -        fprintf(stderr, "missing 'data' key in '%s'\n", fmt);
> -        abort();
> -    }
> -    if (qobject_type(obj) != QTYPE_QDICT) {
> -        fprintf(stderr, "'data' key value should be a dict in '%s'\n", fmt);
> -        abort();
> -    }
> -
> -    return ret;
> -}
> -
>  /**
>   * qerror_from_info(): Create a new QError from error information
>   *
> @@ -390,13 +351,14 @@ static QError *qerror_from_info(ErrorClass err_class, 
> const char *fmt,
>                                  va_list *va)
>  {
>      QError *qerr;
> +    char msg[2048];
>  
>      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);
> +    vsnprintf(msg, sizeof(msg), fmt, *va);
> +    qerr->err_msg = g_strdup(msg);

Suggest

       qerr->err_msg = g_strdup_vprintf(fmt, *va);

>  
>      return qerr;
>  }
[...]

Reply via email to