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