Il 17/04/2012 22:42, Luiz Capitulino ha scritto:
> On Tue, 17 Apr 2012 22:26:55 +0200
> Paolo Bonzini <pbonz...@redhat.com> wrote:
> 
>> Il 17/04/2012 21:36, Luiz Capitulino ha scritto:
>>> +            switch(qobject_type(obj)) {
>>> +            case QTYPE_QSTRING:
>>> +                qstring_append(arglist,
>>> +                               qstring_get_str(qobject_to_qstring(obj)));
>>> +                break;
>>
>> Does this escape commas correctly?
> 
> No, but does it have to? Does QemuOpts accept an option with a coma in it?

Yes, ",," is parsed as ",".

>> It seems much easier to use no_gen and qemu_opts_from_qdict...  Then
>> cmd_netdev_add can be
> 
> netdev_add/del is expected to be a stable interface, so we can't use no_gen.

You can have hmp_netdev_add and the no_gen qmp_netdev_add as front-ends
for the QAPI cmd_netdev_add.  I think it's fair when we have to take
into account backwards-compatibility.  The conversion gives correct
error propagation, so even though QemuOpts still leaks it's a step in
the right direction.

>>   void cmd_foo(QemuOpts *arglist, Error **errp);
> 
> Until now we're treating hmp.c like an external QMP C client, using QemuOpts
> this way will leak qemu internals to hmp.c...

True, but on the other hand it sounds strange to have QAPI clients
encoding options manually and escaping commas.

A KeyValueList (list of string->string associations) could be an
alternative, but I do think that ultimately we want to have a visitor
and remove QemuOpts altogether from net.c.  I can write a proof of
concept in a couple of weeks.  Again, we can proceed in steps.

Paolo

Reply via email to