Up until now it's been assumed that every single error reported through the helper would have VIR_ERR_ERROR level, but this will no longer be the case going forward so we need to make it a little more flexible. Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx> --- src/access/viraccessdriverpolkit.c | 2 +- src/access/viraccessmanager.c | 2 +- src/datatypes.h | 30 ++++++++++++++++++++++++++---- src/libvirt.c | 1 + src/util/virbuffer.c | 4 ++-- src/util/virconf.c | 6 ++++-- src/util/virerror.c | 4 +++- src/util/virerror.h | 11 ++++++----- src/util/virkeyfile.c | 6 ++++-- src/util/virxml.c | 2 +- 10 files changed, 49 insertions(+), 19 deletions(-) diff --git a/src/access/viraccessdriverpolkit.c b/src/access/viraccessdriverpolkit.c index 6954d74a15..1f87e7e152 100644 --- a/src/access/viraccessdriverpolkit.c +++ b/src/access/viraccessdriverpolkit.c @@ -34,7 +34,7 @@ VIR_LOG_INIT("access.accessdriverpolkit"); #define virAccessError(code, ...) \ - virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \ + virReportErrorHelper(VIR_FROM_THIS, code, VIR_ERR_ERROR, __FILE__, \ __FUNCTION__, __LINE__, __VA_ARGS__) #define VIR_ACCESS_DRIVER_POLKIT_ACTION_PREFIX "org.libvirt.api" diff --git a/src/access/viraccessmanager.c b/src/access/viraccessmanager.c index e7b5bf38da..f4230b253a 100644 --- a/src/access/viraccessmanager.c +++ b/src/access/viraccessmanager.c @@ -37,7 +37,7 @@ VIR_LOG_INIT("access.accessmanager"); #define virAccessError(code, ...) \ - virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \ + virReportErrorHelper(VIR_FROM_THIS, code, VIR_ERR_ERROR, __FILE__, \ __FUNCTION__, __LINE__, __VA_ARGS__) struct _virAccessManager { diff --git a/src/datatypes.h b/src/datatypes.h index e1b38706dc..87d6aa9a80 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -49,7 +49,7 @@ extern virClassPtr virAdmClientClass; # define virCheckConnectReturn(obj, retval) \ do { \ if (!virObjectIsClass(obj, virConnectClass)) { \ - virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -59,7 +59,7 @@ extern virClassPtr virAdmClientClass; # define virCheckConnectGoto(obj, label) \ do { \ if (!virObjectIsClass(obj, virConnectClass)) { \ - virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -71,7 +71,7 @@ extern virClassPtr virAdmClientClass; virDomainPtr _dom = (obj); \ if (!virObjectIsClass(_dom, virDomainClass) || \ !virObjectIsClass(_dom->conn, virConnectClass)) { \ - virReportErrorHelper(VIR_FROM_DOM, VIR_ERR_INVALID_DOMAIN, \ + virReportErrorHelper(VIR_FROM_DOM, VIR_ERR_INVALID_DOMAIN, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -83,7 +83,7 @@ extern virClassPtr virAdmClientClass; virDomainPtr _dom = (obj); \ if (!virObjectIsClass(_dom, virDomainClass) || \ !virObjectIsClass(_dom->conn, virConnectClass)) { \ - virReportErrorHelper(VIR_FROM_DOM, VIR_ERR_INVALID_DOMAIN, \ + virReportErrorHelper(VIR_FROM_DOM, VIR_ERR_INVALID_DOMAIN, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -97,6 +97,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_net->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NETWORK, \ VIR_ERR_INVALID_NETWORK, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -110,6 +111,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_net->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NETWORK, \ VIR_ERR_INVALID_NETWORK, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -123,6 +125,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_iface->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_INTERFACE, \ VIR_ERR_INVALID_INTERFACE, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -137,6 +140,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_pool->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STORAGE, \ VIR_ERR_INVALID_STORAGE_POOL, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -151,6 +155,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_pool->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STORAGE, \ VIR_ERR_INVALID_STORAGE_POOL, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -164,6 +169,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_vol->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STORAGE, \ VIR_ERR_INVALID_STORAGE_VOL, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -177,6 +183,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_vol->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STORAGE, \ VIR_ERR_INVALID_STORAGE_VOL, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -190,6 +197,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_node->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NODEDEV, \ VIR_ERR_INVALID_NODE_DEVICE, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -204,6 +212,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_dev->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NODEDEV, \ VIR_ERR_INVALID_NODE_DEVICE, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -217,6 +226,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_secret->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_SECRET, \ VIR_ERR_INVALID_SECRET, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -231,6 +241,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_secret->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_SECRET, \ VIR_ERR_INVALID_SECRET, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -245,6 +256,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_st->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STREAMS, \ VIR_ERR_INVALID_STREAM, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -258,6 +270,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_st->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_STREAMS, \ VIR_ERR_INVALID_STREAM, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -271,6 +284,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_nw->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NWFILTER, \ VIR_ERR_INVALID_NWFILTER, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -285,6 +299,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_nw->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_NWFILTER, \ VIR_ERR_INVALID_NWFILTER_BINDING, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -300,6 +315,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_snap->domain->conn, virConnectClass)) { \ virReportErrorHelper(VIR_FROM_DOMAIN_SNAPSHOT, \ VIR_ERR_INVALID_DOMAIN_SNAPSHOT, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -358,6 +374,7 @@ extern virClassPtr virAdmClientClass; do { \ if (!virObjectIsClass(obj, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -368,6 +385,7 @@ extern virClassPtr virAdmClientClass; do { \ if (!virObjectIsClass(obj, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -380,6 +398,7 @@ extern virClassPtr virAdmClientClass; if (!virObjectIsClass(_srv, virAdmServerClass) || \ !virObjectIsClass(_srv->conn, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -392,6 +411,7 @@ extern virClassPtr virAdmClientClass; if (!virObjectIsClass(_srv, virAdmServerClass) || \ !virObjectIsClass(_srv->conn, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ @@ -405,6 +425,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_clt->srv, virAdmServerClass) || \ !virObjectIsClass(_clt->srv->conn, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ virDispatchError(NULL); \ @@ -418,6 +439,7 @@ extern virClassPtr virAdmClientClass; !virObjectIsClass(_clt->srv, virAdmServerClass) || \ !virObjectIsClass(_clt->srv->conn, virAdmConnectClass)) { \ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \ + VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ __FUNCTION__); \ goto label; \ diff --git a/src/libvirt.c b/src/libvirt.c index 0a738aefb1..3e0bb26b9f 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -988,6 +988,7 @@ virConnectOpenInternal(const char *name, #endif false)) { virReportErrorHelper(VIR_FROM_NONE, VIR_ERR_CONFIG_UNSUPPORTED, + VIR_ERR_ERROR, __FILE__, __FUNCTION__, __LINE__, _("libvirt was built without the '%s' driver"), ret->uri->scheme); diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c index 8a2108f2f2..6306b3f072 100644 --- a/src/util/virbuffer.c +++ b/src/util/virbuffer.c @@ -339,8 +339,8 @@ virBufferCheckErrorInternal(const virBuffer *buf, virReportOOMErrorFull(domcode, filename, funcname, linenr); errno = ENOMEM; } else { - virReportErrorHelper(domcode, VIR_ERR_INTERNAL_ERROR, filename, - funcname, linenr, "%s", + virReportErrorHelper(domcode, VIR_ERR_INTERNAL_ERROR, VIR_ERR_ERROR, + filename, funcname, linenr, "%s", _("Invalid buffer API usage")); errno = EINVAL; } diff --git a/src/util/virconf.c b/src/util/virconf.c index 88a869517e..8a382e8b6e 100644 --- a/src/util/virconf.c +++ b/src/util/virconf.c @@ -110,10 +110,12 @@ virConfErrorHelper(const char *file, const char *func, size_t line, /* Construct the string 'filename:line: info' if we have that. */ if (ctxt && ctxt->filename) { - virReportErrorHelper(VIR_FROM_CONF, error, file, func, line, + virReportErrorHelper(VIR_FROM_CONF, error, VIR_ERR_ERROR, + file, func, line, _("%s:%d: %s"), ctxt->filename, ctxt->line, info); } else { - virReportErrorHelper(VIR_FROM_CONF, error, file, func, line, + virReportErrorHelper(VIR_FROM_CONF, error, VIR_ERR_ERROR, + file, func, line, "%s", info); } } diff --git a/src/util/virerror.c b/src/util/virerror.c index 683e51aa19..517e0bde28 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -1518,6 +1518,7 @@ virErrorMsg(virErrorNumber error, const char *info) * * @domcode: the virErrorDomain indicating where it's coming from * @errorcode: the virErrorNumber code for the error + * @level: the virErrorLevel level for the error * @filename: Source file error is dispatched from * @funcname: Function error is dispatched from * @linenr: Line number error is dispatched from @@ -1529,6 +1530,7 @@ virErrorMsg(virErrorNumber error, const char *info) */ void virReportErrorHelper(int domcode, int errorcode, + virErrorLevel level, const char *filename, const char *funcname, size_t linenr, @@ -1549,7 +1551,7 @@ void virReportErrorHelper(int domcode, virerr = virErrorMsg(errorcode, (errorMessage[0] ? errorMessage : NULL)); virRaiseErrorFull(filename, funcname, linenr, - domcode, errorcode, VIR_ERR_ERROR, + domcode, errorcode, level, virerr, errorMessage, NULL, -1, -1, virerr, errorMessage); errno = save_errno; diff --git a/src/util/virerror.h b/src/util/virerror.h index 31577c5c8c..6e089db0d0 100644 --- a/src/util/virerror.h +++ b/src/util/virerror.h @@ -51,11 +51,12 @@ void virRaiseErrorObject(const char *filename, virErrorPtr err); void virReportErrorHelper(int domcode, int errcode, + virErrorLevel level, const char *filename, const char *funcname, size_t linenr, const char *fmt, ...) - ATTRIBUTE_FMT_PRINTF(6, 7); + ATTRIBUTE_FMT_PRINTF(7, 8); void virReportSystemErrorFull(int domcode, int theerrno, @@ -160,10 +161,10 @@ void virReportSystemErrorFull(int domcode, (fmt), __VA_ARGS__) # define virReportUnsupportedError() \ - virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_NO_SUPPORT, \ + virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_NO_SUPPORT, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, __FUNCTION__) # define virReportRestrictedError(...) \ - virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_OPERATION_DENIED, \ + virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_OPERATION_DENIED, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) /* The sizeof(...) comparison here is a hack to catch typos * in the name of the enum by triggering a compile error, as well @@ -171,7 +172,7 @@ void virReportSystemErrorFull(int domcode, * or struct type, instead of an enum. It should get optimized away * since sizeof() is known at compile time */ # define virReportEnumRangeError(typname, value) \ - virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR, \ + virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR, VIR_ERR_ERROR, \ __FILE__, __FUNCTION__, __LINE__, \ "Unexpected enum value %d for %s", \ value, sizeof((typname)1) != 0 ? #typname : #typname); @@ -185,7 +186,7 @@ void virReportOOMErrorFull(int domcode, virReportOOMErrorFull(VIR_FROM_THIS, __FILE__, __FUNCTION__, __LINE__) # define virReportError(code, ...) \ - virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \ + virReportErrorHelper(VIR_FROM_THIS, code, VIR_ERR_ERROR, __FILE__, \ __FUNCTION__, __LINE__, __VA_ARGS__) # define virReportErrorObject(obj) \ diff --git a/src/util/virkeyfile.c b/src/util/virkeyfile.c index 1006a88837..4a0a7f5ee8 100644 --- a/src/util/virkeyfile.c +++ b/src/util/virkeyfile.c @@ -93,10 +93,12 @@ virKeyFileErrorHelper(const char *file, const char *func, size_t line, { /* Construct the string 'filename:line: info' if we have that. */ if (ctxt && ctxt->filename) { - virReportErrorHelper(VIR_FROM_CONF, error, file, func, line, + virReportErrorHelper(VIR_FROM_CONF, error, VIR_ERR_ERROR, + file, func, line, _("%s:%zu: %s '%s'"), ctxt->filename, ctxt->line, info, ctxt->cur); } else { - virReportErrorHelper(VIR_FROM_CONF, error, file, func, line, + virReportErrorHelper(VIR_FROM_CONF, error, VIR_ERR_ERROR, + file, func, line, "%s", info); } } diff --git a/src/util/virxml.c b/src/util/virxml.c index 998d974882..a5975e6665 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -37,7 +37,7 @@ #define VIR_FROM_THIS VIR_FROM_XML #define virGenericReportError(from, code, ...) \ - virReportErrorHelper(from, code, __FILE__, \ + virReportErrorHelper(from, code, VIR_ERR_ERROR, __FILE__, \ __FUNCTION__, __LINE__, __VA_ARGS__) /* Internal data to be passed to SAX parser and used by error handler. */ -- 2.17.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list