}
+/**
+ * virCPUDataNewCopy:
+ *
+ * Returns a copy of @data or NULL on error.
+ */
+virCPUData *
+virCPUDataNewCopy(virCPUData *data)
+{
+ struct cpuArchDriver *driver;
+
+ VIR_DEBUG("data=%p", data);
+
+ if (!data)
+ return NULL;
+
+ if ((driver = cpuGetSubDriver(data->arch)) && driver->dataCopyNew)
+ return driver->dataCopyNew(data);
+
+ return NULL;
+}
+
/**
* virCPUDataFree:
*
virCPUData **forbidden,
virCPUData **vendor);
+typedef virCPUData *
+(*cpuArchDataCopyNew)(virCPUData *data);
+
typedef void
(*cpuArchDataFree) (virCPUData *data);
virCPUArchCompare compare;
cpuArchDecode decode;
cpuArchEncode encode;
+ cpuArchDataCopyNew dataCopyNew;
cpuArchDataFree dataFree;
virCPUArchGetHost getHost;
virCPUArchBaseline baseline;
virCPUData *
virCPUDataNew(virArch arch);
+virCPUData *
+virCPUDataNewCopy(virCPUData *data);
+
void
virCPUDataFree(virCPUData *data);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUData, virCPUDataFree);