diff options
-rw-r--r-- | include/plist/plist.h | 7 | ||||
-rw-r--r-- | src/plist.c | 5 | ||||
-rw-r--r-- | swig/plist.i | 8 |
3 files changed, 20 insertions, 0 deletions
diff --git a/include/plist/plist.h b/include/plist/plist.h index a075fc6..6388603 100644 --- a/include/plist/plist.h +++ b/include/plist/plist.h @@ -148,6 +148,13 @@ extern "C" { PLIST_API plist_t plist_get_prev_sibling(plist_t node); /** + * Get the parent of a node + * + * @param node the parent (NULL if node is root) + */ + PLIST_API plist_t plist_get_parent(plist_t node); + +/** * Get the nth child of a #PLIST_ARRAY node. * * @param node the node of type #PLIST_ARRAY diff --git a/src/plist.c b/src/plist.c index 8c326af..143418d 100644 --- a/src/plist.c +++ b/src/plist.c @@ -195,6 +195,11 @@ plist_t plist_get_prev_sibling(plist_t node) return (plist_t) g_node_prev_sibling((GNode *) node); } +plist_t plist_get_parent(plist_t node) +{ + return node ? (plist_t) ((GNode *) node)->parent : NULL; +} + plist_t plist_get_array_nth_el(plist_t node, uint32_t n) { plist_t ret = NULL; diff --git a/swig/plist.i b/swig/plist.i index b6f9f78..7240817 100644 --- a/swig/plist.i +++ b/swig/plist.i @@ -141,6 +141,14 @@ typedef struct { return NULL; } + PListNode* get_parent() { + plist_t node = plist_get_parent( $self->node ); + if (node) { + return allocate_wrapper(node, 1); + } + return NULL; + } + %newobject as_key; char* as_key() { char* k = NULL; |