aboutsummaryrefslogtreecommitdiff
path: root/qom
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2020-06-10 09:51:53 +0200
committerDr. David Alan Gilbert <dgilbert@redhat.com>2020-06-17 17:48:39 +0100
commit2d9e3dd9be1de3bbdca113673084dd19a8d957c3 (patch)
tree7d7e15f202c716472d51d43313f3ca039e82b054 /qom
parent246da7db3cc103c537b0dd3c1adadbfd9a94ecd7 (diff)
hmp: Make json format optional for qom-set
Commit 7d2ef6dcc1cf ("hmp: Simplify qom-set") switched to the json parser, making it possible to specify complex types. However, with this change it is no longer possible to specify proper sizes (e.g., 2G, 128M), turning the interface harder to use for properties that consume sizes. Let's switch back to the previous handling and allow to specify passing json via the "-j" parameter. Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: "Daniel P. Berrangé" <berrange@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20200610075153.33892-1-david@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'qom')
-rw-r--r--qom/qom-hmp-cmds.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/qom/qom-hmp-cmds.c b/qom/qom-hmp-cmds.c
index 158e2d7409..b0abe84cb1 100644
--- a/qom/qom-hmp-cmds.c
+++ b/qom/qom-hmp-cmds.c
@@ -44,15 +44,27 @@ void hmp_qom_list(Monitor *mon, const QDict *qdict)
void hmp_qom_set(Monitor *mon, const QDict *qdict)
{
+ const bool json = qdict_get_try_bool(qdict, "json", false);
const char *path = qdict_get_str(qdict, "path");
const char *property = qdict_get_str(qdict, "property");
const char *value = qdict_get_str(qdict, "value");
Error *err = NULL;
- QObject *obj;
- obj = qobject_from_json(value, &err);
- if (err == NULL) {
- qmp_qom_set(path, property, obj, &err);
+ if (!json) {
+ Object *obj = object_resolve_path(path, NULL);
+
+ if (!obj) {
+ error_set(&err, ERROR_CLASS_DEVICE_NOT_FOUND,
+ "Device '%s' not found", path);
+ } else {
+ object_property_parse(obj, value, property, &err);
+ }
+ } else {
+ QObject *obj = qobject_from_json(value, &err);
+
+ if (!err) {
+ qmp_qom_set(path, property, obj, &err);
+ }
}
hmp_handle_error(mon, err);