From 284805e6661a9af3b30f8c1ae52138cf66109607 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Tue, 23 Mar 2010 09:34:04 +0100 Subject: [PATCH] Helper function for making a copy of virCPUDefPtr --- src/conf/cpu_conf.c | 37 +++++++++++++++++++++++++++++++++++++ src/conf/cpu_conf.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 41 insertions(+) diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c index 612e376393..cf91930365 100644 --- a/src/conf/cpu_conf.c +++ b/src/conf/cpu_conf.c @@ -67,6 +67,43 @@ virCPUDefFree(virCPUDefPtr def) } +virCPUDefPtr +virCPUDefCopy(const virCPUDefPtr cpu) +{ + virCPUDefPtr copy; + unsigned int i; + + if (!cpu) + return NULL; + + if (VIR_ALLOC(copy) < 0 + || (cpu->arch && !(copy->arch = strdup(cpu->arch))) + || (cpu->model && !(copy->model = strdup(cpu->model))) + || VIR_ALLOC_N(copy->features, cpu->nfeatures) < 0) + goto no_memory; + + copy->type = cpu->type; + copy->match = cpu->match; + copy->sockets = cpu->sockets; + copy->cores = cpu->cores; + copy->threads = cpu->threads; + copy->nfeatures = cpu->nfeatures; + + for (i = 0; i < copy->nfeatures; i++) { + copy->features[i].policy = cpu->features[i].policy; + if (!(copy->features[i].name = strdup(cpu->features[i].name))) + goto no_memory; + } + + return copy; + +no_memory: + virReportOOMError(); + virCPUDefFree(copy); + return NULL; +} + + #ifndef PROXY virCPUDefPtr virCPUDefParseXML(const xmlNodePtr node, diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h index bb8a8442b8..a30991d234 100644 --- a/src/conf/cpu_conf.h +++ b/src/conf/cpu_conf.h @@ -83,6 +83,9 @@ struct _virCPUDef { void virCPUDefFree(virCPUDefPtr def); +virCPUDefPtr +virCPUDefCopy(const virCPUDefPtr cpu); + # ifndef PROXY virCPUDefPtr virCPUDefParseXML(const xmlNodePtr node, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b389723ab4..4111010b19 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -90,6 +90,7 @@ virCPUDefParseXML; virCPUDefFormat; virCPUDefFormatBuf; virCPUDefAddFeature; +virCPUDefCopy; # datatypes.h