/*
- * Copyright (C) 2009-2012 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009-2013 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
bnd->child->parent = btrn;
goto out;
}
- PARA_EMERG_LOG("inserting internal nodes not yet supported.\n");
- exit(EXIT_FAILURE);
- assert(bnd->child->parent == bnd->parent);
+ list_add_tail(&btrn->node, &bnd->parent->children);
+ list_move(&bnd->child->node, &btrn->children);
+ bnd->child->parent = btrn;
+ PARA_INFO_LOG("added %s as internal node\n", bnd->name);
out:
return btrn;
}
{
struct btr_buffer *btrb;
- assert(size != 0);
+ if (size == 0)
+ return;
if (list_empty(&btrn->children)) {
free(buf);
return;
{
struct btr_buffer *btrb;
- assert(size != 0);
+ if (size == 0)
+ return;
if (list_empty(&btrn->children))
return;
btrb = new_btrb((char *)buf, size);
char *buf;
size_t avail;
- assert(size != 0);
+ if (size == 0)
+ return;
if (list_empty(&btrn->children))
return;
avail = btr_pool_get_buffer(btrp, &buf);
{
*tv = btrn->start;
}
+
+/**
+ * Get the parent node of a buffer tree node.
+ *
+ * \param btrn The node whose parent should be returned.
+ *
+ * \a btrn must not be \p NULL.
+ *
+ * \return The parent of \a btrn, or \p NULL if \a btrn is the
+ * root node of the buffer tree.
+ */
+struct btr_node *btr_parent(struct btr_node *btrn)
+{
+ return btrn->parent;
+}