[libvirt] [PATCH v3 4/9] qemu: add helper function for querying OS info

Michal Privoznik mprivozn at redhat.com
Mon Aug 26 15:30:15 UTC 2019


On 8/23/19 6:31 PM, Jonathon Jongsma wrote:
> This function queries the guest operating system information and adds
> the returned information to an array of typed parameters with field
> names intended to be returned in virDomainGetGuestInfo().
> 
> Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> ---
>   src/qemu/qemu_agent.c |  53 ++++++++++++++++++
>   src/qemu/qemu_agent.h |   1 +
>   tests/qemuagenttest.c | 122 ++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 176 insertions(+)
> 
> diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
> index 963a4b9359..0fcc3fdabd 100644
> --- a/src/qemu/qemu_agent.c
> +++ b/src/qemu/qemu_agent.c
> @@ -2331,3 +2331,56 @@ qemuAgentGetUsers(qemuAgentPtr mon,
>       virJSONValueFree(reply);
>       return ret;
>   }
> +
> +int
> +qemuAgentGetOSInfo(qemuAgentPtr mon,
> +                   virTypedParameterPtr *params,
> +                   int *nparams,
> +                   int *maxparams)
> +{
> +    int ret = -1;
> +    virJSONValuePtr cmd;
> +    virJSONValuePtr reply = NULL;
> +    virJSONValuePtr data = NULL;

Again, VIR_AUTOPTR() is your friend ;-)

Long story short, VIR_AUTOFREE/VIR_AUTOPTR/VIR_AUTOUNREF()/... is our 
use of attribute(__cleanup__) which is a way of telling compiler to call 
a function once the associated variable goes out of scope. In general, 
the function can be anything, but we use it for automagic free/unref.
This way, we can drop explicit calls to virXXXFree() if the variable is 
marked as VIR_AUTO*** and thus save up a few lines.
Also, the code is more robust as there won't be any hidden path this 
forgets to 'goto cleanup' and thus causes a memleak.
It takes some time to get used to it and we still haven't converted our 
code fully (as you realized by now for sure).

Michal




More information about the libvir-list mailing list