Kevin Wolf <kwolf@xxxxxxxxxx> writes: > This switches the HMP command object_add from a QemuOpts-based parser to > user_creatable_add_from_str() which uses a keyval parser and enforces > the QAPI schema. > > Apart from being a cleanup, this makes non-scalar properties and help > accessible. In order for help to be printed to the monitor instead of > stdout, the printf() calls in the help functions are changed to > qemu_printf(). > > Signed-off-by: Kevin Wolf <kwolf@xxxxxxxxxx> > Acked-by: Peter Krempa <pkrempa@xxxxxxxxxx> > Reviewed-by: Eric Blake <eblake@xxxxxxxxxx> > Reviewed-by: Dr. David Alan Gilbert <dgilbert@xxxxxxxxxx> > --- > monitor/hmp-cmds.c | 17 ++--------------- > qom/object_interfaces.c | 11 ++++++----- > hmp-commands.hx | 2 +- > 3 files changed, 9 insertions(+), 21 deletions(-) > > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c > index 3c88a4faef..652cf9ff21 100644 > --- a/monitor/hmp-cmds.c > +++ b/monitor/hmp-cmds.c > @@ -1670,24 +1670,11 @@ void hmp_netdev_del(Monitor *mon, const QDict *qdict) > > void hmp_object_add(Monitor *mon, const QDict *qdict) > { > + const char *options = qdict_get_str(qdict, "object"); > Error *err = NULL; > - QemuOpts *opts; > - Object *obj = NULL; > - > - opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err); > - if (err) { > - goto end; > - } > > - obj = user_creatable_add_opts(opts, &err); > - qemu_opts_del(opts); > - > -end: > + user_creatable_add_from_str(options, &err); > hmp_handle_error(mon, err); > - > - if (obj) { > - object_unref(obj); > - } > } Doesn't this break the list-valued properties (Memdev member host-nodes, NumaNodeOptions member cpus) exactly the same way that made us keep QemuOpts for qemu-system-FOO -object? [...]