[PATCH v2 1/7] hyperv: implement domainSetAutostart

Matt Coleman mcoleman at datto.com
Thu Oct 15 11:45:29 UTC 2020

> On Oct 14, 2020, at 3:24 AM, Pino Toscano <ptoscano at redhat.com> wrote:
> On Tuesday, 13 October 2020 07:13:58 CEST Matt Coleman wrote:
>> +    const char *methodName = NULL, *embeddedParamName = NULL;
>> +    char enabledValue[] = "2", disabledValue[] = "0";
> Not that it is an issue: IMHO using for enabledValue/disabledValue the
> same approach as methodName/embeddedParamName, i.e. simple const char*
> ponting to static strings, is easier.

I originally tried to declare them as const char*, but it failed to 
compile with the following error:

../src/hyperv/hyperv_driver.c: In function ‘hypervDomainSetAutostart’:
../src/hyperv/hyperv_driver.c:2707:56: error: passing argument 3 of 
‘hypervSetEmbeddedProperty’ discards ‘const’ qualifier from pointer target 
type [-Werror=discarded-qualifiers]
 2707 |                               autostart ? enabledValue : disabledValue) < 0) {
      |                               ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
In file included from ../src/hyperv/hyperv_driver.c:36:
../src/hyperv/hyperv_wmi.h:150:15: note: expected ‘char *’ but argument 
is of type ‘const char *’
  150 |         char *value);
      |         ~~~~~~^~~~~

hypervSetEmbeddedProperty() is just a wrapper for virHashUpdateEntry().

> Also there is a bit of style mixup:
> - methodName/embeddedParamName/etc are NULL by default, set to a value
>  for V1 or V2 (left NULL otherwise)
> - enabledValue/disabledValue are set to the values for V1, and changed
>  to V2
> - other patches in this series (#5 and #6) also do "V1 by default,
>  change for V2"
> IMHO a single style would make things easier, especially in case there
> will ever be a V3.

I'll make these consistent. I think it'll be easier to maintain if the 
declarations set a NULL or dummy value and then configuration for all 
Hyper-V versions happens later in a conditional.

>> +    if (hypervInvokeMethod(priv, params, NULL) < 0) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("Could not set autostart"));
> Minor question: is there really no way to get the reason (in form of
> string) of the failure?

hypervInvokeMethod() only returns the XML response data for successful 
requests currently. I’ll look into changing it to always return the XML 
response data (if available).

Thanks for the feedback on these patches. I will be submitting v3 of 
this patchset, but probably won’t get to it until early next week.


More information about the libvir-list mailing list