hyperv: recognize array property as distinct type.

When hyperv code generator for WMI classes identifies common
properties, it needs to take into account array type as a distinct
type, i.e string != string[]. This is the case where v1 of the
Msvm_VirtualSystemSettingData has Notes property as string whereas v2
uses Notes[], therefore they have to be treated as different fields and
cannot be placed in the "common" struct.
This commit is contained in:
Dawid Zamirski 2017-04-18 10:56:20 -04:00 committed by Matthias Bolte
parent b2c12f5765
commit bb9fca7bed
2 changed files with 26 additions and 3 deletions

View File

@ -894,8 +894,31 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
if (VIR_STRDUP(def->name, computerSystem->data.common->ElementName) < 0) if (VIR_STRDUP(def->name, computerSystem->data.common->ElementName) < 0)
goto cleanup; goto cleanup;
if (VIR_STRDUP(def->description, virtualSystemSettingData->data.common->Notes) < 0) if (priv->wmiVersion == HYPERV_WMI_VERSION_V1) {
goto cleanup; if (VIR_STRDUP(def->description,
virtualSystemSettingData->data.v1->Notes) < 0)
goto cleanup;
} else if (priv->wmiVersion == HYPERV_WMI_VERSION_V2 &&
virtualSystemSettingData->data.v2->Notes.data != NULL) {
char **notes = (char **)virtualSystemSettingData->data.v2->Notes.data;
virBuffer buf = VIR_BUFFER_INITIALIZER;
size_t i = 0;
/* in practice Notes has 1 element */
for (i = 0; i < virtualSystemSettingData->data.v2->Notes.count; i++) {
/* but if there's more than 1, separate by double new line */
if (virBufferUse(&buf) > 0)
virBufferAddLit(&buf, "\n\n");
virBufferAdd(&buf, *notes, -1);
notes++;
}
if (virBufferCheckError(&buf))
goto cleanup;
def->description = virBufferContentAndReset(&buf);
}
virDomainDefSetMemoryTotal(def, memorySettingData->data.common->Limit * 1024); /* megabyte to kilobyte */ virDomainDefSetMemoryTotal(def, memorySettingData->data.common->Limit * 1024); /* megabyte to kilobyte */
def->mem.cur_balloon = memorySettingData->data.common->VirtualQuantity * 1024; /* megabyte to kilobyte */ def->mem.cur_balloon = memorySettingData->data.common->VirtualQuantity * 1024; /* megabyte to kilobyte */

View File

@ -251,7 +251,7 @@ class WmiClass:
for cls in self.versions: for cls in self.versions:
for prop in cls.properties: for prop in cls.properties:
# consdered same if matches by name AND type # consdered same if matches by name AND type
key = "%s_%s" % (prop.name, prop.type) key = "%s_%s_%s" % (prop.name, prop.type, prop.is_array)
if key in property_info: if key in property_info:
property_info[key][1] += 1 property_info[key][1] += 1