aboutsummaryrefslogtreecommitdiff
path: root/qom
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2021-03-12 12:35:46 -0500
committerKevin Wolf <kwolf@redhat.com>2021-03-19 10:18:17 +0100
commitbc2f4fcb1dd1a66ede126593fa091c23a94e3ab8 (patch)
tree40d23d69ce1f64f69ef3535c2c021befc48eca20 /qom
parent53c9956d8b3f5eb621fb15c6e6ea67e12f9677e7 (diff)
qom: move user_creatable_add_opts logic to vl.c and QAPIfy it
Emulators are currently using OptsVisitor (via user_creatable_add_opts) to parse the -object command line option. This has one extra feature, compared to keyval, which is automatic conversion of integers to lists as well as support for lists as repeated options: -object memory-backend-ram,id=pc.ram,size=1048576000,host-nodes=0,policy=bind So we cannot replace OptsVisitor with keyval right now. Still, this patch moves the user_creatable_add_opts logic to vl.c since it is not needed anywhere else, and makes it go through user_creatable_add_qapi. In order to minimize code changes, the predicate still takes a string. This can be changed later to use the ObjectType QAPI enum directly. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20210312173547.1283477-3-pbonzini@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'qom')
-rw-r--r--qom/object_interfaces.c54
1 files changed, 0 insertions, 54 deletions
diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 7b87f21883..b17aa57de1 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -141,60 +141,6 @@ void user_creatable_add_qapi(ObjectOptions *options, Error **errp)
visit_free(v);
}
-Object *user_creatable_add_opts(QemuOpts *opts, Error **errp)
-{
- Visitor *v;
- QDict *pdict;
- Object *obj;
- const char *id = qemu_opts_id(opts);
- char *type = qemu_opt_get_del(opts, "qom-type");
-
- if (!type) {
- error_setg(errp, QERR_MISSING_PARAMETER, "qom-type");
- return NULL;
- }
- if (!id) {
- error_setg(errp, QERR_MISSING_PARAMETER, "id");
- qemu_opt_set(opts, "qom-type", type, &error_abort);
- g_free(type);
- return NULL;
- }
-
- qemu_opts_set_id(opts, NULL);
- pdict = qemu_opts_to_qdict(opts, NULL);
-
- v = opts_visitor_new(opts);
- obj = user_creatable_add_type(type, id, pdict, v, errp);
- visit_free(v);
-
- qemu_opts_set_id(opts, (char *) id);
- qemu_opt_set(opts, "qom-type", type, &error_abort);
- g_free(type);
- qobject_unref(pdict);
- return obj;
-}
-
-
-int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp)
-{
- bool (*type_opt_predicate)(const char *, QemuOpts *) = opaque;
- Object *obj = NULL;
- const char *type;
-
- type = qemu_opt_get(opts, "qom-type");
- if (type && type_opt_predicate &&
- !type_opt_predicate(type, opts)) {
- return 0;
- }
-
- obj = user_creatable_add_opts(opts, errp);
- if (!obj) {
- return -1;
- }
- object_unref(obj);
- return 0;
-}
-
char *object_property_help(const char *name, const char *type,
QObject *defval, const char *description)
{