diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 77b40638e8..4606429868 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3591,6 +3591,29 @@ qemuMonitorCPUDefsNew(size_t count) } +qemuMonitorCPUDefsPtr +qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src) +{ + g_autoptr(qemuMonitorCPUDefs) defs = NULL; + size_t i; + + if (!src) + return NULL; + + defs = qemuMonitorCPUDefsNew(src->ncpus); + for (i = 0; i < src->ncpus; i++) { + qemuMonitorCPUDefInfoPtr cpuDst = defs->cpus + i; + qemuMonitorCPUDefInfoPtr cpuSrc = src->cpus + i; + + cpuDst->usable = cpuSrc->usable; + cpuDst->name = g_strdup(cpuSrc->name); + cpuDst->blockers = g_strdupv(cpuSrc->blockers); + } + + return g_steal_pointer(&defs); +} + + int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 588ee80260..cd8e850ed2 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1103,6 +1103,7 @@ struct _qemuMonitorCPUDefs { int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefsPtr *cpuDefs); qemuMonitorCPUDefsPtr qemuMonitorCPUDefsNew(size_t count); +qemuMonitorCPUDefsPtr qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src); void qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs); G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuMonitorCPUDefs, qemuMonitorCPUDefsFree);