hyperv: Fix and improve hypervListAllDomains

Use MATCH for all flags checks.

hypervMsvmComputerSystemToDomain expects the domain pointer to the
initialized to NULL.

All items in doms up to the count-th one are valid, no need to double
check before freeing them.
This commit is contained in:
Matthias Bolte 2012-09-09 17:39:40 +02:00
parent 5fc663d8be
commit 9e9ea3ead9

View File

@ -1302,13 +1302,14 @@ hypervListAllDomains(virConnectPtr conn,
virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_VIRTUAL);
/* construct query with filter depending on flags */
if (!(flags & VIR_CONNECT_LIST_DOMAINS_ACTIVE &&
flags & VIR_CONNECT_LIST_DOMAINS_INACTIVE)) {
if (flags & VIR_CONNECT_LIST_DOMAINS_ACTIVE) {
if (!(MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE) &&
MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE))) {
if (MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE)) {
virBufferAddLit(&query, "and ");
virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_ACTIVE);
}
if (flags & VIR_CONNECT_LIST_DOMAINS_INACTIVE) {
if (MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE)) {
virBufferAddLit(&query, "and ");
virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_INACTIVE);
}
@ -1358,14 +1359,16 @@ hypervListAllDomains(virConnectPtr conn,
continue;
}
if (VIR_RESIZE_N(doms, ndoms, count, 2) < 0)
if (VIR_RESIZE_N(doms, ndoms, count, 2) < 0)
goto no_memory;
domain = NULL;
if (hypervMsvmComputerSystemToDomain(conn, computerSystem,
&domain) < 0)
goto cleanup;
doms[count++] = domain;
doms[count++] = domain;
}
if (doms)
@ -1376,13 +1379,14 @@ hypervListAllDomains(virConnectPtr conn,
cleanup:
if (doms) {
for (i = 0; i < count; ++i) {
if (doms[i])
virDomainFree(doms[i]);
virDomainFree(doms[i]);
}
VIR_FREE(doms);
}
VIR_FREE(doms);
hypervFreeObject(priv, (hypervObject *)computerSystemList);
return ret;
no_memory: