[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v1 06/25] error: Add error_printf_fn()
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [RFC PATCH v1 06/25] error: Add error_printf_fn() |
Date: |
Thu, 10 Sep 2015 22:33:16 -0700 |
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 <address@hidden>
---
include/qapi/error.h | 7 +++++++
util/error.c | 22 ++++++++++++++++++++--
2 files changed, 27 insertions(+), 2 deletions(-)
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.
+ */
+
+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
+++ b/util/error.c
@@ -163,10 +163,18 @@ void error_prefix(Error *err, const char *fmt, ...) {
g_free(msg);
}
+static void error_report_err_printf(void *opaque, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ error_vreport(fmt, ap);
+ va_end(ap);
+}
+
void error_report_err(Error *err)
{
- error_report("%s", error_get_pretty(err));
- error_free(err);
+ error_printf_fn(err, error_report_err_printf, NULL);
}
void error_free(Error *err)
@@ -180,6 +188,16 @@ void error_free(Error *err)
}
}
+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);
+}
+
void error_propagate(Error **dst_errp, Error *local_err)
{
if (local_err && dst_errp == &error_abort) {
--
1.9.1
- Re: [Qemu-devel] [RFC PATCH v1 01/25] exec: convert error_report to error_report_err, (continued)
- [Qemu-devel] [RFC PATCH v1 02/25] s390x: virtio-ccw: Remove un-needed if guard, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 03/25] error: Factor out common error setter logic, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 04/25] error: Add support for multiple errors, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 05/25] error: Add error prefix API, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 07/25] sysbus: mmio_map+mmio_get_region: ignore range OOB errors, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 06/25] error: Add error_printf_fn(),
Peter Crosthwaite <=
- [Qemu-devel] [RFC PATCH v1 08/25] memory: nop APIs when they have NULL arguments, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 09/25] qdev: gpio: Ignore unconnectable GPIOs, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 10/25] arm: xlnx-zynqmp: Update error API usages, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 12/25] arm: netduino: Update error API usages, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 11/25] arm: fsl-imx*: Update error API usages, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 13/25] arm: allwinner: Update error API usages, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 14/25] arm: digic: Update error API usages, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 15/25] cpu: arm: Remove un-needed error checking, Peter Crosthwaite, 2015/09/11
- [Qemu-devel] [RFC PATCH v1 16/25] ppc: Update error API usages, Peter Crosthwaite, 2015/09/11