This matches the convention established by the object_set_props and object_set_propv methods.
Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Reviewed-by: Marc-André Lureau <[email protected]> Signed-off-by: Daniel P. Berrangé <[email protected]> --- include/qom/object.h | 4 +++- qom/object_interfaces.c | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 83b0cd01b5..822f56c87e 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -924,8 +924,10 @@ bool type_print_class_properties(const char *type); * * For each key in the dictionary, parse the value string if needed, * then set the corresponding property in @obj. + * + * Returns: %true on success, %false on error. */ -void object_set_props_from_keyval(Object *obj, const QDict *qdict, +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, bool from_json, Error **errp); /** diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index 4377d65b76..50736b80c8 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -44,13 +44,14 @@ bool user_creatable_can_be_deleted(UserCreatable *uc) } } -static void object_set_props_from_qdict(Object *obj, const QDict *qdict, +static bool object_set_props_from_qdict(Object *obj, const QDict *qdict, Visitor *v, Error **errp) { + ERRP_GUARD(); const QDictEntry *e; if (!visit_start_struct(v, NULL, NULL, 0, errp)) { - return; + return false; } for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) { if (!object_property_set(obj, e->key, v, errp)) { @@ -60,19 +61,23 @@ static void object_set_props_from_qdict(Object *obj, const QDict *qdict, visit_check_struct(v, errp); out: visit_end_struct(v, NULL); + + return *errp == NULL; } -void object_set_props_from_keyval(Object *obj, const QDict *qdict, +bool object_set_props_from_keyval(Object *obj, const QDict *qdict, bool from_json, Error **errp) { + bool ret; Visitor *v; if (from_json) { v = qobject_input_visitor_new(QOBJECT(qdict)); } else { v = qobject_input_visitor_new_keyval(QOBJECT(qdict)); } - object_set_props_from_qdict(obj, qdict, v, errp); + ret = object_set_props_from_qdict(obj, qdict, v, errp); visit_free(v); + return ret; } Object *user_creatable_add_type(const char *type, const char *id, -- 2.54.0
