diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/plist.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/plist.c b/src/plist.c index e077ad9..f33de0a 100644 --- a/src/plist.c +++ b/src/plist.c | |||
| @@ -405,17 +405,18 @@ plist_t plist_dict_get_item(plist_t node, const char* key) | |||
| 405 | 405 | ||
| 406 | void plist_dict_set_item(plist_t node, const char* key, plist_t item) | 406 | void plist_dict_set_item(plist_t node, const char* key, plist_t item) |
| 407 | { | 407 | { |
| 408 | if (node && PLIST_DICT == plist_get_node_type(node)) | 408 | if (node && PLIST_DICT == plist_get_node_type(node)) { |
| 409 | { | ||
| 410 | node_t* old_item = plist_dict_get_item(node, key); | 409 | node_t* old_item = plist_dict_get_item(node, key); |
| 411 | if (old_item) | 410 | if (old_item) { |
| 412 | { | ||
| 413 | int idx = plist_free_node(old_item); | 411 | int idx = plist_free_node(old_item); |
| 414 | if (idx < 0) { | 412 | if (idx < 0) { |
| 415 | node_attach(node, item); | 413 | node_attach(node, item); |
| 416 | } else { | 414 | } else { |
| 417 | node_insert(node, idx, item); | 415 | node_insert(node, idx, item); |
| 418 | } | 416 | } |
| 417 | } else { | ||
| 418 | node_attach(node, plist_new_key(key)); | ||
| 419 | node_attach(node, item); | ||
| 419 | } | 420 | } |
| 420 | } | 421 | } |
| 421 | return; | 422 | return; |
| @@ -466,7 +467,7 @@ void plist_dict_merge(plist_t *target, plist_t source) | |||
| 466 | if (plist_dict_get_item(*target, key) != NULL) | 467 | if (plist_dict_get_item(*target, key) != NULL) |
| 467 | plist_dict_remove_item(*target, key); | 468 | plist_dict_remove_item(*target, key); |
| 468 | 469 | ||
| 469 | plist_dict_insert_item(*target, key, plist_copy(subnode)); | 470 | plist_dict_set_item(*target, key, plist_copy(subnode)); |
| 470 | free(key); | 471 | free(key); |
| 471 | key = NULL; | 472 | key = NULL; |
| 472 | } while (1); | 473 | } while (1); |
