Message ID | 1306948500-15086-2-git-send-email-mdroth@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
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,
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,