summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2019-05-20 01:10:48 +0200
committerGravatar Nikias Bassen2019-05-20 01:10:48 +0200
commitea37ed01b8c7e05078620ed039899ddff48eac1c (patch)
tree00934c62f94a023cc2a18bf4feb601210c3f20f4
parent9555e71d9887d0d5caf87341dc47d9ad313bb609 (diff)
downloadlibplist-ea37ed01b8c7e05078620ed039899ddff48eac1c.tar.gz
libplist-ea37ed01b8c7e05078620ed039899ddff48eac1c.tar.bz2
Add plist_dict_item_get_key() to allow retrieving the key node for a given item of a #PLIST_DICT
-rw-r--r--include/plist/plist.h12
-rw-r--r--src/plist.c11
2 files changed, 21 insertions, 2 deletions
diff --git a/include/plist/plist.h b/include/plist/plist.h
index bba735d..7a41fb4 100644
--- a/include/plist/plist.h
+++ b/include/plist/plist.h
@@ -353,9 +353,9 @@ extern "C"
void plist_dict_next_item(plist_t node, plist_dict_iter iter, char **key, plist_t *val);
/**
- * Get key associated to an item. Item must be member of a dictionary
+ * Get key associated key to an item. Item must be member of a dictionary.
*
- * @param node the node
+ * @param node the item
* @param key a location to store the key. The caller is responsible for freeing the returned string.
*/
void plist_dict_get_item_key(plist_t node, char **key);
@@ -371,6 +371,14 @@ extern "C"
plist_t plist_dict_get_item(plist_t node, const char* key);
/**
+ * Get key node associated to an item. Item must be member of a dictionary.
+ *
+ * @param node the item
+ * @return the key node of the given item, or NULL.
+ */
+ plist_t plist_dict_item_get_key(plist_t node);
+
+ /**
* Set item identified by key in a #PLIST_DICT node.
* 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.
diff --git a/src/plist.c b/src/plist.c
index dd659b8..29dbfb7 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -618,6 +618,17 @@ PLIST_API void plist_dict_get_item_key(plist_t node, char **key)
}
}
+PLIST_API plist_t plist_dict_item_get_key(plist_t node)
+{
+ plist_t ret = NULL;
+ plist_t father = plist_get_parent(node);
+ if (PLIST_DICT == plist_get_node_type(father))
+ {
+ ret = (plist_t)node_prev_sibling(node);
+ }
+ return ret;
+}
+
PLIST_API plist_t plist_dict_get_item(plist_t node, const char* key)
{
plist_t ret = NULL;