diff options
Diffstat (limited to 'qobject')
| -rw-r--r-- | qobject/qdict.c | 14 | ||||
| -rw-r--r-- | qobject/qerror.c | 4 |
2 files changed, 12 insertions, 6 deletions
diff --git a/qobject/qdict.c b/qobject/qdict.c index 0f3e0a6c81..17e14f08b1 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -481,7 +481,7 @@ static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix) { QObject *value; const QDictEntry *entry, *next; - const char *new_key; + char *new_key; bool delete; entry = qdict_first(qdict); @@ -494,18 +494,24 @@ static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix) delete = false; if (prefix) { - qobject_incref(value); new_key = g_strdup_printf("%s.%s", prefix, entry->key); - qdict_put_obj(target, new_key, value); - delete = true; } if (qobject_type(value) == QTYPE_QDICT) { + /* Entries of QDicts are processed recursively, the QDict object + * itself disappears. */ qdict_do_flatten(qobject_to_qdict(value), target, new_key ? new_key : entry->key); delete = true; + } else if (prefix) { + /* All other objects are moved to the target unchanged. */ + qobject_incref(value); + qdict_put_obj(target, new_key, value); + delete = true; } + g_free(new_key); + if (delete) { qdict_del(qdict, entry->key); diff --git a/qobject/qerror.c b/qobject/qerror.c index 3aee1cf6a6..fc8331aa67 100644 --- a/qobject/qerror.c +++ b/qobject/qerror.c @@ -42,8 +42,8 @@ static QError *qerror_new(void) * * Return strong reference. */ -static QError *qerror_from_info(ErrorClass err_class, const char *fmt, - va_list *va) +static QError * GCC_FMT_ATTR(2, 0) +qerror_from_info(ErrorClass err_class, const char *fmt, va_list *va) { QError *qerr; |