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 <lukedyue@gmail.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Luke Yue 2021-07-12 19:32:14 +08:00 committed by Martin Kletzander
parent 444c7c2725
commit 8a7cfb10b8
4 changed files with 59 additions and 33 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -567,6 +567,7 @@ virDomainObjDeprecation;
virDomainObjEndAPI;
virDomainObjFormat;
virDomainObjGetDefs;
virDomainObjGetMessages;
virDomainObjGetMetadata;
virDomainObjGetOneDef;
virDomainObjGetOneDefState;

View File

@ -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);