diff options
Diffstat (limited to 'qobject/qdict.c')
-rw-r--r-- | qobject/qdict.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/qobject/qdict.c b/qobject/qdict.c index 45c8b53361..d1997a0d8a 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -882,18 +882,20 @@ QObject *qdict_crumple(const QDict *src, Error **errp) child = qdict_get(two_level, prefix); if (suffix) { - if (child) { - if (qobject_type(child) != QTYPE_QDICT) { + QDict *child_dict = qobject_to(QDict, child); + if (!child_dict) { + if (child) { error_setg(errp, "Key %s prefix is already set as a scalar", prefix); goto error; } - } else { - child = QOBJECT(qdict_new()); - qdict_put_obj(two_level, prefix, child); + + child_dict = qdict_new(); + qdict_put_obj(two_level, prefix, QOBJECT(child_dict)); } + qobject_incref(ent->value); - qdict_put_obj(qobject_to(QDict, child), suffix, ent->value); + qdict_put_obj(child_dict, suffix, ent->value); } else { if (child) { error_setg(errp, "Key %s prefix is already set as a dict", @@ -913,9 +915,9 @@ QObject *qdict_crumple(const QDict *src, Error **errp) multi_level = qdict_new(); for (ent = qdict_first(two_level); ent != NULL; ent = qdict_next(two_level, ent)) { - - if (qobject_type(ent->value) == QTYPE_QDICT) { - child = qdict_crumple(qobject_to(QDict, ent->value), errp); + QDict *dict = qobject_to(QDict, ent->value); + if (dict) { + child = qdict_crumple(dict, errp); if (!child) { goto error; } |