"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,\
> 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
> 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
> * 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.