diff options
Diffstat (limited to 'libcnary/node.c')
| -rw-r--r-- | libcnary/node.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libcnary/node.c b/libcnary/node.c index 9457548..c152f91 100644 --- a/libcnary/node.c +++ b/libcnary/node.c @@ -162,9 +162,15 @@ int node_attach(node_t parent, node_t child) int node_detach(node_t parent, node_t child) { if (!parent || !child) return NODE_ERR_INVALID_ARG; + if (!parent->children) return NODE_ERR_NOT_FOUND; + if (child->parent && child->parent != parent) return NODE_ERR_PARENT; + int node_index = node_list_remove(parent->children, child); if (node_index >= 0) { - parent->count--; + if (parent->count > 0) parent->count--; + child->parent = NULL; + child->prev = NULL; + child->next = NULL; } return node_index; } |
