summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/plist/plist.h7
-rw-r--r--src/plist.c5
-rw-r--r--swig/plist.i8
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;