Kevin Wolf <kw...@redhat.com> writes: > This adds a function that, given a QDict of non-help options, prints > help for user creatable objects. > > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > include/qom/object_interfaces.h | 9 +++++++++ > qom/object_interfaces.c | 9 +++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/include/qom/object_interfaces.h b/include/qom/object_interfaces.h > index f118fb516b..53b114b11a 100644 > --- a/include/qom/object_interfaces.h > +++ b/include/qom/object_interfaces.h > @@ -161,6 +161,15 @@ int user_creatable_add_opts_foreach(void *opaque, > */ > bool user_creatable_print_help(const char *type, QemuOpts *opts); > > +/** > + * user_creatable_print_help_from_qdict: > + * @args: options to create > + * > + * Prints help considering the other options given in @args (if "qom-type" is > + * given and valid, print properties for the type, otherwise print valid > types) > + */ > +void user_creatable_print_help_from_qdict(QDict *args); > + > /** > * user_creatable_del: > * @id: the unique ID for the object > diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c > index 3fd1da157e..ed896fe764 100644 > --- a/qom/object_interfaces.c > +++ b/qom/object_interfaces.c > @@ -279,6 +279,15 @@ bool user_creatable_print_help(const char *type, > QemuOpts *opts) > return false; > } > > +void user_creatable_print_help_from_qdict(QDict *args) > +{ > + const char *type = qdict_get_try_str(args, "qom-type"); > + > + if (!type || !user_creatable_print_type_properites(type)) { > + user_creatable_print_types(); > + }
Existing user_creatable_print_help(): 1. "qom-type=help,..." and its sugared forms, in particular "help" List QOM types and succeed. 2. "qom-type=T,help,..." 2a. If T names a QOM type List T's properties and succeed. 2b. If T does not name a QOM type Fail. Callers typically interpret this as "no help requested", proceed, then choke on invalid qom-type=T. New user_creatable_print_help() treats case 2b like case 1. Intentional? > +} > + > bool user_creatable_del(const char *id, Error **errp) > { > Object *container;