[libvirt] [PATCH v3 1/2] bhyve: Separate out checks from virBhyveProbeCaps
Laine Stump
laine at laine.org
Mon Nov 14 16:58:06 UTC 2016
On 11/14/2016 11:45 AM, Laine Stump wrote:
> On 11/07/2016 09:20 AM, Roman Bogorodskiy wrote:
>> From: Fabian Freyer <fabian.freyer at physik.tu-berlin.de>
>>
>> At the moment this is just one check, but separating this out into a
>> separate function makes checks more modular, allowing for more readable
>> code once more checks are added. This also makes checks more easily
>> testable.
>>
>> Signed-off-by: Roman Bogorodskiy <bogorodskiy at gmail.com>
>> ---
>> src/bhyve/bhyve_capabilities.c | 31 ++++++++++++++++++++++---------
>> 1 file changed, 22 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/bhyve/bhyve_capabilities.c
>> b/src/bhyve/bhyve_capabilities.c
>> index 10c33b9..be68e51 100644
>> --- a/src/bhyve/bhyve_capabilities.c
>> +++ b/src/bhyve/bhyve_capabilities.c
>> @@ -168,19 +168,13 @@ virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps)
>> return ret;
>> }
>> -int
>> -virBhyveProbeCaps(unsigned int *caps)
>> +static int
>> +bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
>> {
>> - char *binary, *help;
>> + char *help;
>> virCommandPtr cmd = NULL;
>> int ret = 0, exit;
>
> It's more common for functions to have ret initialized to -1, then set
> ret = 0 just before the "cleanup" label (if execution has gotten that
> far, you were successful). You can then eliminate the extra "ret = -1"
> on failure in this function.
>
> (In this case, the amount of code is the same, but in functions with
> many failure paths, it's less lines to assume the failure value for
> ret. Doing it the same way in this function is just more consistent
> with other code.)
>
>> - binary = virFindFileInPath("bhyve");
>> - if (binary == NULL)
>> - goto out;
>> - if (!virFileIsExecutable(binary))
>> - goto out;
>> -
>> cmd = virCommandNew(binary);
>> virCommandAddArg(cmd, "-h");
>> virCommandSetErrorBuffer(cmd, &help);
>> @@ -195,6 +189,25 @@ virBhyveProbeCaps(unsigned int *caps)
>> out:
>
> Also, the libvirt hacking guide requests that you use the name
> "cleanup" for a label that can be jumped to in case of an error, or
> dropped through in case of success. (Yes, I know there are lots of
> cases of "out:" in the code, but I try to get rid of them whenever I'm
> touching code nearby).
>
>> VIR_FREE(help);
>> virCommandFree(cmd);
>> + return ret;
>> +}
>> +
>> +int
>> +virBhyveProbeCaps(unsigned int *caps)
>
>
> If your path is anything like qemu's, you're eventually going to want
> to make caps at least a virBitmapPtr, and even more likely a
> virBhyveCapsPtr. (not that I'm suggesting you do that now, but the
> sooner you do it, the easier it will be to make the switch :-)
>
>
>> +{
>> + char *binary;
>> + int ret = 0;
>> +
>> + binary = virFindFileInPath("bhyve");
>> + if (binary == NULL)
>> + goto out;
>> + if (!virFileIsExecutable(binary))
>> + goto out;
>> +
>> + if ((ret = bhyveProbeCapsRTC_UTC(caps, binary)))
>> + goto out;
>
> This is technically correct, but the convention in libvirt code is to
> take the branch if the return value is < 0.
... and I forgot to say it before, but if you've initialized ret = -1,
then you don't want to save the return value of bhyveProbeCapsRTC_UTC()
in ret. Instead, just do this:
if (bhyveProbeCapsRTC_UTC(caps, binary) < 0)
goto cleanup;
>
>> +
>> + out:
>
> Again, libvirt prefers the label "cleanup" instead of "out".
(and should be preceded by "ret = 0;")
>
>> VIR_FREE(binary);
>> return ret;
>> }
>
>
> ACK, but I'd prefer you change both functions to 1) init ret = -1, 2)
> change the labels from out: to cleanup:, and 3) compare ret < 0 when
> checking for failure of bhyveProbeCapsRTC_UTC().
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list