[libvirt] [PATCH 07/11] caps: Add virCapabilitiesDomainDataLookup
Michal Privoznik
mprivozn at redhat.com
Mon Apr 20 13:53:00 UTC 2015
On 18.04.2015 03:45, Cole Robinson wrote:
> This is a helper function to look up all capabilities data for all
> the OS bits that are relevant to <domain>. This is
>
> - os type
> - arch
> - domain type
> - emulator
> - machine type
>
> This will be used to replace several functions in later commits.
> ---
> src/conf/capabilities.c | 163 +++++++++++++++++++++++++++++++++++-
> src/conf/capabilities.h | 18 ++++
> src/libvirt_private.syms | 1 +
> tests/Makefile.am | 8 +-
> tests/vircapstest.c | 209 ++++++++++++++++++++++++++++++++++++++++++++++-
> 5 files changed, 393 insertions(+), 6 deletions(-)
>
> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
> index 9f84766..8d3d2a3 100644
> --- a/src/conf/capabilities.c
> +++ b/src/conf/capabilities.c
> @@ -225,7 +225,6 @@ virCapabilitiesDispose(void *object)
> virCPUDefFree(caps->host.cpu);
> }
>
> -
> /**
> * virCapabilitiesAddHostFeature:
> * @caps: capabilities to extend
> @@ -568,6 +567,168 @@ virCapabilitiesHostSecModelAddBaseLabel(virCapsHostSecModelPtr secmodel,
> return -1;
> }
>
> +static bool
> +virCapsDomainDataCompare(virCapsGuestPtr guest,
> + virCapsGuestDomainPtr domain,
> + virCapsGuestMachinePtr machine,
> + int ostype,
> + virArch arch,
> + int domaintype,
> + const char *emulator,
> + const char *machinetype)
> +{
> + char *check_emulator = NULL;
const char please to make it obvious we don't modify it.
> +
> + if (ostype != -1 && guest->ostype != ostype)
> + return false;
> + if ((arch != VIR_ARCH_NONE) && (guest->arch.id != arch))
> + return false;
> +
> + if (domaintype != -1 && (!domain || domain->type != domaintype))
> + return false;
> +
> + if (emulator) {
> + if (domain)
> + check_emulator = domain->info.emulator;
> + if (!check_emulator)
> + check_emulator = guest->arch.defaultInfo.emulator;
> + if (!check_emulator || STRNEQ(check_emulator, emulator))
or STRNEQ_NULLABLE()
> + return false;
> + }
> +
> + if (machinetype) {
> + if (!machine)
> + return false;
> + if (STRNEQ(machine->name, machinetype) &&
> + (!machine->canonical || STRNEQ(machine->canonical, machinetype)))
and here as well.
> + return false;
> + }
> +
> + return true;
> +}
> +
> /**
> * virCapabilitiesSupportsGuestArch:
> * @caps: capabilities to query
> diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
> index 7ee834f..87acf39 100644
> --- a/src/conf/capabilities.h
> +++ b/src/conf/capabilities.h
> @@ -192,6 +192,16 @@ struct _virCaps {
> virCapsGuestPtr *guests;
> };
>
> +typedef struct _virCapsDomainData virCapsDomainData;
> +typedef virCapsDomainData *virCapsDomainDataPtr;
> +struct _virCapsDomainData {
> + int ostype;
> + int arch;
> + int domaintype;
> + char *emulator;
> + char *machinetype;
const char to both please. You are copying over the pointer to live data
so we must discourage people to free any of the pair. I know that
'const' is not a sufficient protection, but it's at least something.
> +};
> +
>
Michal
More information about the libvir-list
mailing list