/** * Detach node and all its sub-tree from a tree, making it the new root of * a smaller tree. */ void xnode_detach(xnode_t *xn) { etree_t t; xnode_check(xn); etree_init_root(&t, xn, TRUE, offsetof(xnode_t, node)); etree_detach(&t, xn); }
/** * Free sub-tree, destroying all its items and removing the reference in * the parent node, if any. * * @param tree the tree descriptor * @param item root item of sub-tree to remove * @param fcb free routine for each item */ void etree_sub_free(etree_t *tree, void *item, free_fn_t fcb) { etree_t dtree; etree_check(tree); etree_detach(tree, item); etree_init_root(&dtree, item, etree_is_extended(tree), tree->offset); etree_free(&dtree, fcb); }