|
@@ -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);
|