summaryrefslogtreecommitdiff
path: root/qobject
diff options
context:
space:
mode:
authorBenoƮt Canet <benoit@irqsave.net>2013-09-25 13:30:01 +0200
committerKevin Wolf <kwolf@redhat.com>2013-09-25 16:21:28 +0200
commit5726d872f3c7a78a6c17ff5a6e47e01cff0a5e55 (patch)
tree63261e5b688f1f83ff1709e4765ee50c7fddad58 /qobject
parentc3e4f43a99549daa6e9b87350922e8339341c2ab (diff)
downloadqemu-5726d872f3c7a78a6c17ff5a6e47e01cff0a5e55.tar.gz
qdict: Extract qdict_extract_subqdict
Signed-off-by: Benoit Canet <benoit@irqsave.net> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'qobject')
-rw-r--r--qobject/qdict.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/qobject/qdict.c b/qobject/qdict.c
index 472f106e27..0f3e0a6c81 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -527,3 +527,24 @@ void qdict_flatten(QDict *qdict)
{
qdict_do_flatten(qdict, qdict, NULL);
}
+
+/* extract all the src QDict entries starting by start into dst */
+void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start)
+
+{
+ const QDictEntry *entry, *next;
+ const char *p;
+
+ *dst = qdict_new();
+ entry = qdict_first(src);
+
+ while (entry != NULL) {
+ next = qdict_next(src, entry);
+ if (strstart(entry->key, start, &p)) {
+ qobject_incref(entry->value);
+ qdict_put_obj(*dst, p, entry->value);
+ qdict_del(src, entry->key);
+ }
+ entry = next;
+ }
+}