Commit f9299fa8 authored by Nikias Bassen's avatar Nikias Bassen

plist_dict_set_item: insert key/value pair if key not already present

parent 6dcc8c48
......@@ -310,20 +310,21 @@ extern "C"
/**
* Set item identified by key in a #PLIST_DICT node.
* The previous item at index n will be freed using #plist_free
* The previous item identified by key will be freed using #plist_free.
* If there is no item for the given key a new item will be inserted.
*
* @param node the node of type #PLIST_DICT
* @param item the new item associated to key
* @param key the identifier of the item to get. Assert if identifier is not present.
* @param key the identifier of the item to set.
*/
PLIST_API void plist_dict_set_item(plist_t node, const char* key, plist_t item);
/**
* Insert a new item at position n in a #PLIST_DICT node.
* Insert a new item into a #PLIST_DICT node.
*
* @param node the node of type #PLIST_DICT
* @param item the new item to insert
* @param key The identifier of the item to insert. Assert if identifier already present.
* @param key The identifier of the item to insert.
*/
PLIST_API void plist_dict_insert_item(plist_t node, const char* key, plist_t item);
......
......@@ -405,17 +405,18 @@ plist_t plist_dict_get_item(plist_t node, const char* key)
void plist_dict_set_item(plist_t node, const char* key, plist_t item)
{
if (node && PLIST_DICT == plist_get_node_type(node))
{
if (node && PLIST_DICT == plist_get_node_type(node)) {
node_t* old_item = plist_dict_get_item(node, key);
if (old_item)
{
if (old_item) {
int idx = plist_free_node(old_item);
if (idx < 0) {
node_attach(node, item);
} else {
node_insert(node, idx, item);
}
if (idx < 0) {
node_attach(node, item);
} else {
node_insert(node, idx, item);
}
} else {
node_attach(node, plist_new_key(key));
node_attach(node, item);
}
}
return;
......@@ -466,7 +467,7 @@ void plist_dict_merge(plist_t *target, plist_t source)
if (plist_dict_get_item(*target, key) != NULL)
plist_dict_remove_item(*target, key);
plist_dict_insert_item(*target, key, plist_copy(subnode));
plist_dict_set_item(*target, key, plist_copy(subnode));
free(key);
key = NULL;
} while (1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment