From ea37ed01b8c7e05078620ed039899ddff48eac1c Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 20 May 2019 01:10:48 +0200 Subject: Add plist_dict_item_get_key() to allow retrieving the key node for a given item of a #PLIST_DICT --- include/plist/plist.h | 12 ++++++++++-- src/plist.c | 11 +++++++++++ 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); @@ -370,6 +370,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. 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; -- cgit v1.1-32-gdbae