diff options
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 26 |
1 files changed, 26 insertions, 0 deletions
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 |