On 09/10/2015 11:33 PM, Peter Crosthwaite wrote: > Add an API to report an error with a custom printf function. Use > this for the implementation of error_report_err(). > > Signed-off-by: Peter Crosthwaite <crosthwaite.pe...@gmail.com> > --- > > include/qapi/error.h | 7 +++++++ > util/error.c | 22 ++++++++++++++++++++-- > 2 files changed, 27 insertions(+), 2 deletions(-)
Sounds independently useful. > > diff --git a/include/qapi/error.h b/include/qapi/error.h > index b25c72f..0e5c311 100644 > --- a/include/qapi/error.h > +++ b/include/qapi/error.h > @@ -94,6 +94,13 @@ const char *error_get_pretty(Error *err); > void error_report_err(Error *); > > /** > + * Report an and free an error object using a custom printf implementation. s/an and/and/ > + */ > + > +void error_printf_fn(Error *err, void (*printf_fn)(void *, const char *, > ...), > + void *printf_opaque); > + > +/** > * Propagate an error to an indirect pointer to an error. This function will > * always transfer ownership of the error reference and handles the case > where > * dst_err is NULL correctly. Errors after the first are discarded. > diff --git a/util/error.c b/util/error.c > index e9c23ce..c4656af 100644 > --- a/util/error.c > +void error_printf_fn(Error *err, void (*printf_fn)(void *, const char *, > ...), > + void *printf_opaque) > +{ > + if (err->next) { > + error_printf_fn(err->next, printf_fn, printf_opaque); > + } > + printf_fn(printf_opaque, "%s\n", error_get_pretty(err)); > + error_free(err); > +} Of course, if you rebase this to come independent of multi-error, it won't need the first 'if'. But it looks like a reasonable factorization. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature