summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcnary/node.c7
-rw-r--r--libcnary/node_list.c4
2 files changed, 7 insertions, 4 deletions
diff --git a/libcnary/node.c b/libcnary/node.c
index 264c78e..0a8f414 100644
--- a/libcnary/node.c
+++ b/libcnary/node.c
@@ -95,11 +95,12 @@ int node_attach(node_t* parent, node_t* child) {
}
int node_detach(node_t* parent, node_t* child) {
- if (!parent || !child) return 0;
- if (node_list_remove(parent->children, child) == 0) {
+ if (!parent || !child) return -1;
+ int index = node_list_remove(parent->children, child);
+ if (index >= 0) {
parent->count--;
}
- return 0;
+ return index;
}
int node_insert(node_t* parent, unsigned int index, node_t* child)
diff --git a/libcnary/node_list.c b/libcnary/node_list.c
index 78f450e..5b291e7 100644
--- a/libcnary/node_list.c
+++ b/libcnary/node_list.c
@@ -124,6 +124,7 @@ int node_list_remove(node_list_t* list, node_t* node) {
if (!list || !node) return -1;
if (list->count == 0) return -1;
+ int index = 0;
node_t* n;
for (n = list->begin; n; n = n->next) {
if (node == n) {
@@ -144,8 +145,9 @@ int node_list_remove(node_list_t* list, node_t* node) {
list->begin = newnode;
}
list->count--;
- return 0;
+ return index;
}
+ index++;
}
return -1;
}