"Daniel P. Berrange" <berra...@redhat.com> writes: > Some of the historical command line opts that had their > keys in in a completely flat namespace are now represented > by QAPI schemas that use a nested structs. When converting > the QemuOpts to QObject, there is no information about > compound types available, so the QObject will be completely > flat, even after the qdict_crumple() call. So when starting > a struct, we may not have a QDict available in the input > data, so we auto-create a QDict containing all the currently > unvisited input data keys. Not all historical command line > opts require this, so the behaviour is opt-in, by specifying > how many levels of structs are permitted to be auto-created. > > Note that this only works if the child struct is the last > field to the visited in the parent struct. This is always > the case for currently existing legacy command line options. > > The example is the NetLegacy type which has 3 levels of > structs. The modern way to represent this in QemuOpts would > be the dot-separated component approach > > -net vlan=1,id=foo,name=bar,opts.type=tap,\ > opts.data.fd=3,opts.data.script=ifup > > The legacy syntax will just be presenting > > -net vlan=1,id=foo,name=bar,type=tap,fd=3,script=ifup > > So we need to auto-create 3 levels of struct when visiting. > > The implementation here will enable visiting in both the > modern and legacy syntax, compared to OptsVisitor which > only allows the legacy syntax. > > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> > --- > include/qapi/qobject-input-visitor.h | 22 +++++- > qapi/qobject-input-visitor.c | 59 ++++++++++++++-- > tests/test-qobject-input-visitor.c | 130 > ++++++++++++++++++++++++++++++++--- > 3 files changed, 194 insertions(+), 17 deletions(-) > > diff --git a/include/qapi/qobject-input-visitor.h > b/include/qapi/qobject-input-visitor.h > index 1809f48..94051f3 100644 > --- a/include/qapi/qobject-input-visitor.h > +++ b/include/qapi/qobject-input-visitor.h > @@ -45,7 +45,7 @@ Visitor *qobject_input_visitor_new(QObject *obj, bool > strict); > * If @autocreate_list is true, then as an alternative to a normal QList, > * list values can be stored as a QString or QDict instead, which will > * be interpreted as representing single element lists. This should only > - * by used if compatibility is required with the OptsVisitor which allowed > + * be used if compatibility is required with the OptsVisitor which allowed > * repeated keys, without list indexes, to represent lists. e.g. set this > * to true if you have compatibility requirements for > *
Typo introduced in the previous patch, please fix it there. Skipping the rest of this patch until it's clear we need it. [...]