qom: Support JSON in HMP object_add and tools --object

Support JSON for --object in all tools and in HMP object_add in the same
way as it is supported in qobject_input_visitor_new_str().

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20210312131921.421023-1-kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Kevin Wolf 2021-03-12 14:19:21 +01:00
parent f3b70e0779
commit 155b5f8b8d
1 changed files with 21 additions and 11 deletions

View File

@ -296,25 +296,35 @@ static void user_creatable_print_help_from_qdict(QDict *args)
ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp) ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp)
{ {
ERRP_GUARD(); ERRP_GUARD();
QDict *args; QObject *obj;
bool help; bool help;
Visitor *v; Visitor *v;
ObjectOptions *options; ObjectOptions *options;
args = keyval_parse(optarg, "qom-type", &help, errp); if (optarg[0] == '{') {
if (*errp) { obj = qobject_from_json(optarg, errp);
return NULL; if (!obj) {
} return NULL;
if (help) { }
user_creatable_print_help_from_qdict(args); v = qobject_input_visitor_new(obj);
qobject_unref(args); } else {
return NULL; QDict *args = keyval_parse(optarg, "qom-type", &help, errp);
if (*errp) {
return NULL;
}
if (help) {
user_creatable_print_help_from_qdict(args);
qobject_unref(args);
return NULL;
}
obj = QOBJECT(args);
v = qobject_input_visitor_new_keyval(obj);
} }
v = qobject_input_visitor_new_keyval(QOBJECT(args));
visit_type_ObjectOptions(v, NULL, &options, errp); visit_type_ObjectOptions(v, NULL, &options, errp);
visit_free(v); visit_free(v);
qobject_unref(args); qobject_unref(obj);
return options; return options;
} }