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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list