Patchwork [v1,01/14] QError: Introduce qerror_format_desc()

login
register
mail settings
Submitter Michael Roth
Date June 1, 2011, 5:14 p.m.
Message ID <1306948500-15086-2-git-send-email-mdroth@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/98305/
State New
Headers show

Comments

Michael Roth - June 1, 2011, 5:14 p.m.
From: Luiz Capitulino <lcapitulino@redhat.com>

Refactor non-QError-specific bits out of qerror_human() into general
function that can be used by the error_get_pretty() analogue in the
new error-propagation framework.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 qerror.c |   44 +++++++++++++++++++++++++-------------------
 1 files changed, 25 insertions(+), 19 deletions(-)
Anthony Liguori - June 7, 2011, 7:18 p.m.
On 06/01/2011 12:14 PM, Michael Roth wrote:
> From: Luiz Capitulino<lcapitulino@redhat.com>
>
> Refactor non-QError-specific bits out of qerror_human() into general
> function that can be used by the error_get_pretty() analogue in the
> new error-propagation framework.
>
> Signed-off-by: Luiz Capitulino<lcapitulino@redhat.com>
> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com>

Applied series1.  Thanks.

Regards,

Anthony Liguori

> ---
>   qerror.c |   44 +++++++++++++++++++++++++-------------------
>   1 files changed, 25 insertions(+), 19 deletions(-)
>
> diff --git a/qerror.c b/qerror.c
> index 4855604..af6ed39 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -326,12 +326,14 @@ QError *qerror_from_info(const char *file, int linenr, const char *func,
>       return qerr;
>   }
>
> -static void parse_error(const QError *qerror, int c)
> +static void parse_error(const QErrorStringTable *entry, int c)
>   {
> -    qerror_abort(qerror, "expected '%c' in '%s'", c, qerror->entry->desc);
> +    fprintf(stderr, "expected '%c' in '%s'", c, entry->desc);
> +    abort();
>   }
>
> -static const char *append_field(QString *outstr, const QError *qerror,
> +static const char *append_field(QDict *error, QString *outstr,
> +                                const QErrorStringTable *entry,
>                                   const char *start)
>   {
>       QObject *obj;
> @@ -340,23 +342,23 @@ static const char *append_field(QString *outstr, const QError *qerror,
>       const char *end, *key;
>
>       if (*start != '%')
> -        parse_error(qerror, '%');
> +        parse_error(entry, '%');
>       start++;
>       if (*start != '(')
> -        parse_error(qerror, '(');
> +        parse_error(entry, '(');
>       start++;
>
>       end = strchr(start, ')');
>       if (!end)
> -        parse_error(qerror, ')');
> +        parse_error(entry, ')');
>
>       key_qs = qstring_from_substr(start, 0, end - start - 1);
>       key = qstring_get_str(key_qs);
>
> -    qdict = qobject_to_qdict(qdict_get(qerror->error, "data"));
> +    qdict = qobject_to_qdict(qdict_get(error, "data"));
>       obj = qdict_get(qdict, key);
>       if (!obj) {
> -        qerror_abort(qerror, "key '%s' not found in QDict", key);
> +        abort();
>       }
>
>       switch (qobject_type(obj)) {
> @@ -367,35 +369,31 @@ static const char *append_field(QString *outstr, const QError *qerror,
>               qstring_append_int(outstr, qdict_get_int(qdict, key));
>               break;
>           default:
> -            qerror_abort(qerror, "invalid type '%c'", qobject_type(obj));
> +            abort();
>       }
>
>       QDECREF(key_qs);
>       return ++end;
>   }
>
> -/**
> - * qerror_human(): Format QError data into human-readable string.
> - *
> - * Formats according to member 'desc' of the specified QError object.
> - */
> -QString *qerror_human(const QError *qerror)
> +static QString *qerror_format_desc(QDict *error,
> +                                   const QErrorStringTable *entry)
>   {
> -    const char *p;
>       QString *qstring;
> +    const char *p;
>
> -    assert(qerror->entry != NULL);
> +    assert(entry != NULL);
>
>       qstring = qstring_new();
>
> -    for (p = qerror->entry->desc; *p != '\0';) {
> +    for (p = entry->desc; *p != '\0';) {
>           if (*p != '%') {
>               qstring_append_chr(qstring, *p++);
>           } else if (*(p + 1) == '%') {
>               qstring_append_chr(qstring, '%');
>               p += 2;
>           } else {
> -            p = append_field(qstring, qerror, p);
> +            p = append_field(error, qstring, entry, p);
>           }
>       }
>
> @@ -403,6 +401,14 @@ QString *qerror_human(const QError *qerror)
>   }
>
>   /**
> + * qerror_human(): Format QError data into human-readable string.
> + */
> +QString *qerror_human(const QError *qerror)
> +{
> +    return qerror_format_desc(qerror->error, qerror->entry);
> +}
> +
> +/**
>    * qerror_print(): Print QError data
>    *
>    * This function will print the member 'desc' of the specified QError object,

Patch

diff --git a/qerror.c b/qerror.c
index 4855604..af6ed39 100644
--- a/qerror.c
+++ b/qerror.c
@@ -326,12 +326,14 @@  QError *qerror_from_info(const char *file, int linenr, const char *func,
     return qerr;
 }
 
-static void parse_error(const QError *qerror, int c)
+static void parse_error(const QErrorStringTable *entry, int c)
 {
-    qerror_abort(qerror, "expected '%c' in '%s'", c, qerror->entry->desc);
+    fprintf(stderr, "expected '%c' in '%s'", c, entry->desc);
+    abort();
 }
 
-static const char *append_field(QString *outstr, const QError *qerror,
+static const char *append_field(QDict *error, QString *outstr,
+                                const QErrorStringTable *entry,
                                 const char *start)
 {
     QObject *obj;
@@ -340,23 +342,23 @@  static const char *append_field(QString *outstr, const QError *qerror,
     const char *end, *key;
 
     if (*start != '%')
-        parse_error(qerror, '%');
+        parse_error(entry, '%');
     start++;
     if (*start != '(')
-        parse_error(qerror, '(');
+        parse_error(entry, '(');
     start++;
 
     end = strchr(start, ')');
     if (!end)
-        parse_error(qerror, ')');
+        parse_error(entry, ')');
 
     key_qs = qstring_from_substr(start, 0, end - start - 1);
     key = qstring_get_str(key_qs);
 
-    qdict = qobject_to_qdict(qdict_get(qerror->error, "data"));
+    qdict = qobject_to_qdict(qdict_get(error, "data"));
     obj = qdict_get(qdict, key);
     if (!obj) {
-        qerror_abort(qerror, "key '%s' not found in QDict", key);
+        abort();
     }
 
     switch (qobject_type(obj)) {
@@ -367,35 +369,31 @@  static const char *append_field(QString *outstr, const QError *qerror,
             qstring_append_int(outstr, qdict_get_int(qdict, key));
             break;
         default:
-            qerror_abort(qerror, "invalid type '%c'", qobject_type(obj));
+            abort();
     }
 
     QDECREF(key_qs);
     return ++end;
 }
 
-/**
- * qerror_human(): Format QError data into human-readable string.
- *
- * Formats according to member 'desc' of the specified QError object.
- */
-QString *qerror_human(const QError *qerror)
+static QString *qerror_format_desc(QDict *error,
+                                   const QErrorStringTable *entry)
 {
-    const char *p;
     QString *qstring;
+    const char *p;
 
-    assert(qerror->entry != NULL);
+    assert(entry != NULL);
 
     qstring = qstring_new();
 
-    for (p = qerror->entry->desc; *p != '\0';) {
+    for (p = entry->desc; *p != '\0';) {
         if (*p != '%') {
             qstring_append_chr(qstring, *p++);
         } else if (*(p + 1) == '%') {
             qstring_append_chr(qstring, '%');
             p += 2;
         } else {
-            p = append_field(qstring, qerror, p);
+            p = append_field(error, qstring, entry, p);
         }
     }
 
@@ -403,6 +401,14 @@  QString *qerror_human(const QError *qerror)
 }
 
 /**
+ * qerror_human(): Format QError data into human-readable string.
+ */
+QString *qerror_human(const QError *qerror)
+{
+    return qerror_format_desc(qerror->error, qerror->entry);
+}
+
+/**
  * qerror_print(): Print QError data
  *
  * This function will print the member 'desc' of the specified QError object,