[libvirt] [PATCH 04/16] hyperv: implement connectGetVersion
John Ferlan
jferlan at redhat.com
Wed Sep 14 21:59:35 UTC 2016
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 */
>
More information about the libvir-list
mailing list