On Wed, May 03, 2017 at 11:39:10AM -0500, Eric Blake wrote:
> On 05/03/2017 11:35 AM, Eduardo Habkost wrote:
> 
> >> +
> >> +        memset(&cpu, 0, sizeof(cpu));
> >> +        cpu.has_node_id = object->u.cpu.has_node_id;
> >> +        cpu.node_id = object->u.cpu.node_id;
> >> +        cpu.has_socket_id = object->u.cpu.has_socket_id;
> >> +        cpu.socket_id = object->u.cpu.socket_id;
> >> +        cpu.has_core_id = object->u.cpu.has_core_id;
> >> +        cpu.core_id = object->u.cpu.core_id;
> >> +        cpu.has_thread_id = object->u.cpu.has_thread_id;
> >> +        cpu.thread_id = object->u.cpu.thread_id;
> > 
> > We don't have a way to avoid copying each field individually?
> > Some visitor trick, maybe?
> > 
> > Eric, Markus, Michael, do you have any suggestions?
> 
> Markus just added QAPI_CLONE_MEMBERS(), which sounds like what you want:
> 
> https://lists.gnu.org/archive/html/qemu-devel/2017-04/msg04867.html

Not sure if it would work in this case. Note that cpu and
object->u.cpu have different types. 'cpu' is CpuInstanceProps,
but object->u.cpu is NodeCpuOptions.

NodeCpuOptions has { 'base': 'CpuInstanceProps' }, and
CpuInstanceProps field declarations are duplicated in struct
NodeCpuOptions. Do you know why struct inheritance is implemented
by duplicating the fields of the base struct instead of embedding
the base struct?

-- 
Eduardo

Reply via email to