virDomainObjGetMessages: Refactor using GPtrArray

Simplify the function especially by rewriting it using GPtrArray to
construct the string list, especially for the upcoming case when the
number of added elements will not be known beforehand and when
hypervisor specific data will be added.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Peter Krempa 2025-01-27 17:38:51 +01:00
parent 042ea8630b
commit 1a02760cc6
5 changed files with 33 additions and 34 deletions

View File

@ -31685,53 +31685,31 @@ virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev)
/** /**
* virDomainObjGetMessages: * virDomainObjGetMessages:
* @vm: domain object * @vm: domain object
* @msgs: pointer to a variable to store messages * @m: GPtrArray to be filled with messages
* @flags: zero or more virDomainMessageType flags * @flags: zero or more virDomainMessageType flags
*
* Returns number of messages stored in @msgs, -1 otherwise.
*/ */
int void
virDomainObjGetMessages(virDomainObj *vm, virDomainObjGetMessages(virDomainObj *vm,
char ***msgs, GPtrArray *m,
unsigned int flags) unsigned int flags)
{ {
size_t i = 0; size_t i = 0;
size_t n = 0;
int nmsgs = 0;
int rv = -1;
*msgs = NULL;
if (!flags || (flags & VIR_DOMAIN_MESSAGE_TAINTING)) { 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++) { for (i = 0; i < VIR_DOMAIN_TAINT_LAST; i++) {
if (vm->taint & (1 << i)) { if (vm->taint & (1 << i)) {
(*msgs)[n++] = g_strdup_printf( g_ptr_array_add(m, g_strdup_printf(_("tainted: %1$s"),
_("tainted: %1$s"), _(virDomainTaintMessageTypeToString(i))));
_(virDomainTaintMessageTypeToString(i)));
} }
} }
} }
if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) { if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) {
nmsgs += vm->ndeprecations;
*msgs = g_renew(char *, *msgs, nmsgs+1);
for (i = 0; i < vm->ndeprecations; i++) { for (i = 0; i < vm->ndeprecations; i++) {
(*msgs)[n++] = g_strdup_printf( g_ptr_array_add(m, g_strdup_printf(_("deprecated configuration: %1$s"),
_("deprecated configuration: %1$s"), vm->deprecations[i]));
vm->deprecations[i]);
} }
} }
if (*msgs)
(*msgs)[nmsgs] = NULL;
rv = nmsgs;
return rv;
} }
bool bool

View File

@ -4588,9 +4588,9 @@ bool
virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev) virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
int void
virDomainObjGetMessages(virDomainObj *vm, virDomainObjGetMessages(virDomainObj *vm,
char ***msgs, GPtrArray *m,
unsigned int flags); unsigned int flags);
bool bool

View File

@ -6575,6 +6575,7 @@ libxlDomainGetMessages(virDomainPtr dom,
char ***msgs, char ***msgs,
unsigned int flags) unsigned int flags)
{ {
g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
int ret = -1; int ret = -1;
@ -6587,7 +6588,13 @@ libxlDomainGetMessages(virDomainPtr dom,
if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0) if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0)
goto cleanup; goto cleanup;
ret = virDomainObjGetMessages(vm, msgs, flags); virDomainObjGetMessages(vm, m, flags);
ret = m->len;
if (m->len > 0) {
g_ptr_array_add(m, NULL);
*msgs = (char **) g_ptr_array_steal(m, NULL);
}
cleanup: cleanup:
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);

View File

@ -19834,6 +19834,7 @@ qemuDomainGetMessages(virDomainPtr dom,
char ***msgs, char ***msgs,
unsigned int flags) unsigned int flags)
{ {
g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
int rv = -1; int rv = -1;
@ -19846,7 +19847,13 @@ qemuDomainGetMessages(virDomainPtr dom,
if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0) if (virDomainGetMessagesEnsureACL(dom->conn, vm->def) < 0)
goto cleanup; goto cleanup;
rv = virDomainObjGetMessages(vm, msgs, flags); virDomainObjGetMessages(vm, m, flags);
rv = m->len;
if (m->len > 0) {
g_ptr_array_add(m, NULL);
*msgs = (char **) g_ptr_array_steal(m, NULL);
}
cleanup: cleanup:
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);

View File

@ -9522,6 +9522,7 @@ testDomainGetMessages(virDomainPtr dom,
char ***msgs, char ***msgs,
unsigned int flags) unsigned int flags)
{ {
g_autoptr(GPtrArray) m = g_ptr_array_new_with_free_func(g_free);
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
int rv = -1; int rv = -1;
@ -9531,7 +9532,13 @@ testDomainGetMessages(virDomainPtr dom,
if (!(vm = testDomObjFromDomain(dom))) if (!(vm = testDomObjFromDomain(dom)))
return -1; return -1;
rv = virDomainObjGetMessages(vm, msgs, flags); virDomainObjGetMessages(vm, m, flags);
rv = m->len;
if (m->len > 0) {
g_ptr_array_add(m, NULL);
*msgs = (char **) g_ptr_array_steal(m, NULL);
}
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
return rv; return rv;