
On 08/09/2016 08:39 AM, Jason Miesionczek wrote:
--- src/hyperv/hyperv_driver.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 4a5e80d..b2d1abf 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -1349,6 +1349,57 @@ hypervConnectGetCapabilities(virConnectPtr conn) return xml; }
+static int +hypervConnectGetVersion(virConnectPtr conn, unsigned long *version) +{ + int result = -1; + hypervPrivate *priv = conn->privateData; + CIM_DataFile *datafile = NULL; + virBuffer query = VIR_BUFFER_INITIALIZER; + char *p; + + virBufferAddLit(&query, " Select * from CIM_DataFile where Name='c:\\\\windows\\\\system32\\\\vmms.exe' ");
That's too long of a line and there's an issue pointed out by another reviewer... Is this typical? To use some sort of CIM query? I assume that means you require a CIM Server to be running? There really is no other way?
+ if (hypervGetCIMDataFileList(priv, &query, &datafile) < 0) { + goto cleanup; + }
More { } issues.
+ + /* Check the result of convertion */
conversion
+ if (datafile == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not lookup %s for domain %s"), + "Msvm_VirtualSystemSettingData", + datafile->data->Version);
Build failure here due to datafile == NULL
+ goto cleanup; + } + + /* Delete release number and last digit of build number 1.1.111x.xxxx */ + p = strrchr(datafile->data->Version,'.');
s/Version,'.'/Version, '.'/
+ if (p == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not parse version number from '%s'"), + datafile->data->Version); + goto cleanup; + } + p--; + *p = '\0'; + + /* Parse Version String to Long */
an Unsigned Long
+ if (virParseVersionString(datafile->data->Version, + version, true) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not parse version number from '%s'"), + datafile->data->Version); + goto cleanup; + } + + result = 0; + + cleanup: + hypervFreeObject(priv, (hypervObject *)datafile); + virBufferFreeAndReset(&query); + + return result; +}
static virHypervisorDriver hypervHypervisorDriver = { .name = "Hyper-V", @@ -1385,6 +1436,7 @@ static virHypervisorDriver hypervHypervisorDriver = { .domainManagedSaveRemove = hypervDomainManagedSaveRemove, /* 0.9.5 */ .connectIsAlive = hypervConnectIsAlive, /* 0.9.8 */ .connectGetCapabilities = hypervConnectGetCapabilities, /* 1.2.10 */ + .connectGetVersion = hypervConnectGetVersion, /* 1.2.10 */
2.3.0 at the earliest... John
};
/* Retrieves host system UUID */