From 26f34f031287b232b45df00e566c356fb95c399a Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Tue, 19 Nov 2013 22:03:21 +0100 Subject: common: Add plist_dict_merge() helper to merge dictionaries --- src/common.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/common.c') diff --git a/src/common.c b/src/common.c index 6c2b613..426b96f 100644 --- a/src/common.c +++ b/src/common.c @@ -262,3 +262,29 @@ void idevicerestore_progress(struct idevicerestore_client_t* client, int step, d } } } + +void plist_dict_merge(plist_t* dictionary, plist_t node) +{ + if (dictionary == NULL || (plist_get_node_type(*dictionary) != PLIST_DICT)) + return; + + char* key = NULL; + plist_dict_iter it = NULL; + plist_t subnode = NULL; + plist_dict_new_iter(node, &it); + plist_dict_next_item(node, it, &key, &subnode); + + while (subnode) + { + if (plist_dict_get_item(*dictionary, key) != NULL) + plist_dict_remove_item(*dictionary, key); + + plist_dict_insert_item(*dictionary, key, plist_copy(subnode)); + if (key) { + free(key); + key = NULL; + } + plist_dict_next_item(node, it, &key, &subnode); + } + free(it); +} \ No newline at end of file -- cgit v1.1-32-gdbae