From 8a7cfb10b83720d00b927b6f58f4abca80db8f0e Mon Sep 17 00:00:00 2001 From: Luke Yue Date: Mon, 12 Jul 2021 19:32:14 +0800 Subject: [PATCH] conf: domain: Introduce and use virDomainObjGetMessages() The test driver and qemu driver could share the same code in virDomainGetMessages(), so extract it to a function. Signed-off-by: Luke Yue Reviewed-by: Martin Kletzander --- src/conf/domain_conf.c | 52 ++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 5 ++++ src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 34 +------------------------- 4 files changed, 59 insertions(+), 33 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 06c1fcf5e5..09da4ab952 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -31209,3 +31209,55 @@ virHostdevIsVFIODevice(const virDomainHostdevDef *hostdev) hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO; } + + +/** + * virDomainObjGetMessages: + * @vm: domain object + * @msgs: pointer to a variable to store messages + * @flags: zero or more virDomainMessageType flags + * + * Returns number of messages stored in @msgs, -1 otherwise. + */ +int +virDomainObjGetMessages(virDomainObj *vm, + char ***msgs, + unsigned int flags) +{ + size_t i = 0; + size_t n = 0; + int nmsgs = 0; + int rv = -1; + + *msgs = NULL; + + if (!flags || (flags & VIR_DOMAIN_MESSAGE_TAINTING)) { + nmsgs += __builtin_popcount(vm->taint); + *msgs = g_renew(char *, *msgs, nmsgs+1); + + for (i = 0; i < VIR_DOMAIN_TAINT_LAST; i++) { + if (vm->taint & (1 << i)) { + (*msgs)[n++] = g_strdup_printf( + _("tainted: %s"), + _(virDomainTaintMessageTypeToString(i))); + } + } + } + + if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) { + nmsgs += vm->ndeprecations; + *msgs = g_renew(char *, *msgs, nmsgs+1); + + for (i = 0; i < vm->ndeprecations; i++) { + (*msgs)[n++] = g_strdup_printf( + _("deprecated configuration: %s"), + vm->deprecations[i]); + } + } + + (*msgs)[nmsgs] = NULL; + + rv = nmsgs; + + return rv; +} diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ca21082624..9f32bcf9cf 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4165,3 +4165,8 @@ virHostdevIsMdevDevice(const virDomainHostdevDef *hostdev) bool virHostdevIsVFIODevice(const virDomainHostdevDef *hostdev) ATTRIBUTE_NONNULL(1); + +int +virDomainObjGetMessages(virDomainObj *vm, + char ***msgs, + unsigned int flags); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 43493ea76e..6961cdb137 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -567,6 +567,7 @@ virDomainObjDeprecation; virDomainObjEndAPI; virDomainObjFormat; virDomainObjGetDefs; +virDomainObjGetMessages; virDomainObjGetMetadata; virDomainObjGetOneDef; virDomainObjGetOneDefState; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0b35bbc15c..d8c431b41a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20362,8 +20362,6 @@ qemuDomainGetMessages(virDomainPtr dom, { virDomainObj *vm = NULL; int rv = -1; - size_t i, n; - int nmsgs; virCheckFlags(VIR_DOMAIN_MESSAGE_DEPRECATION | VIR_DOMAIN_MESSAGE_TAINTING, -1); @@ -20374,37 +20372,7 @@ qemuDomainGetMessages(virDomainPtr dom, if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0) goto cleanup; - *msgs = NULL; - nmsgs = 0; - n = 0; - - if (!flags || (flags & VIR_DOMAIN_MESSAGE_TAINTING)) { - nmsgs += __builtin_popcount(vm->taint); - *msgs = g_renew(char *, *msgs, nmsgs+1); - - for (i = 0; i < VIR_DOMAIN_TAINT_LAST; i++) { - if (vm->taint & (1 << i)) { - (*msgs)[n++] = g_strdup_printf( - _("tainted: %s"), - _(virDomainTaintMessageTypeToString(i))); - } - } - } - - if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) { - nmsgs += vm->ndeprecations; - *msgs = g_renew(char *, *msgs, nmsgs+1); - - for (i = 0; i < vm->ndeprecations; i++) { - (*msgs)[n++] = g_strdup_printf( - _("deprecated configuration: %s"), - vm->deprecations[i]); - } - } - - (*msgs)[nmsgs] = NULL; - - rv = nmsgs; + rv = virDomainObjGetMessages(vm, msgs, flags); cleanup: virDomainObjEndAPI(&vm);