Add support to duplicate a virCapsGuestMachine object -- e.g., from cached emulator information. --- src/conf/capabilities.c | 34 ++++++++++++++++++++++++++++++++++ src/conf/capabilities.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 38 insertions(+) Index: libvirt-0.9.10/src/conf/capabilities.h =================================================================== --- libvirt-0.9.10.orig/src/conf/capabilities.h +++ libvirt-0.9.10/src/conf/capabilities.h @@ -208,6 +208,9 @@ virCapabilitiesSetHostCPU(virCapsPtr cap extern virCapsGuestMachinePtr * virCapabilitiesAllocMachines(const char *const *names, int nnames); +extern virCapsGuestMachinePtr * +virCapabilitiesDupMachines(const virCapsGuestMachinePtr *smachines, + int nmachines); extern void virCapabilitiesFreeMachines(virCapsGuestMachinePtr *machines, int nmachines); Index: libvirt-0.9.10/src/conf/capabilities.c =================================================================== --- libvirt-0.9.10.orig/src/conf/capabilities.c +++ libvirt-0.9.10/src/conf/capabilities.c @@ -325,6 +325,40 @@ virCapabilitiesAllocMachines(const char } /** + * virCapabilitiesDupMachines: + * @smachines: table of virCapsGuestMachinePtr + * @nmachines: number of machine variants in table + * + * Allocate a table of virCapsGuestMachinePtr from the supplied table + * of virCapsGuestMachinePtr + */ +virCapsGuestMachinePtr * +virCapabilitiesDupMachines(const virCapsGuestMachinePtr *smachines, int nmachines) +{ + virCapsGuestMachinePtr *machines; + int i; + + if (VIR_ALLOC_N(machines, nmachines) < 0) + return NULL; + + for (i = 0; i < nmachines; i++) { + if (VIR_ALLOC(machines[i]) < 0 || + !(machines[i]->name = strdup(smachines[i]->name))) + goto error; + if (smachines[i]->canonical && + !(machines[i]->canonical = strdup(smachines[i]->canonical))) + goto error; + } + + return machines; + +error: + virCapabilitiesFreeMachines(machines, nmachines); + return NULL; + +} + +/** * virCapabilitiesFreeMachines: * @machines: table of vircapsGuestMachinePtr * Index: libvirt-0.9.10/src/libvirt_private.syms =================================================================== --- libvirt-0.9.10.orig/src/libvirt_private.syms +++ libvirt-0.9.10/src/libvirt_private.syms @@ -49,6 +49,7 @@ virCapabilitiesAllocMachines; virCapabilitiesDefaultGuestArch; virCapabilitiesDefaultGuestEmulator; virCapabilitiesDefaultGuestMachine; +virCapabilitiesDupMachines; virCapabilitiesFormatXML; virCapabilitiesFree; virCapabilitiesFreeMachines; -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list