X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=buffer_tree.c;h=b1eeb0363e3741d288656e8c5cea5aa9d186c0ab;hp=bb854124c6be6089f604815473755af783ceb5e8;hb=74145aabe851ba5b7eff47b650f401f49b5c740d;hpb=f652ce6afe7f6fd0e42814505234cbf4321a736e diff --git a/buffer_tree.c b/buffer_tree.c index bb854124..b1eeb036 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -386,7 +386,8 @@ void btr_add_output(char *buf, size_t size, struct btr_node *btrn) { struct btr_buffer *btrb; - assert(size != 0); + if (size == 0) + return; if (list_empty(&btrn->children)) { free(buf); return; @@ -415,7 +416,8 @@ void btr_add_output_dont_free(const char *buf, size_t size, struct btr_node *btr { struct btr_buffer *btrb; - assert(size != 0); + if (size == 0) + return; if (list_empty(&btrn->children)) return; btrb = new_btrb((char *)buf, size); @@ -442,7 +444,8 @@ void btr_add_output_pool(struct btr_pool *btrp, size_t 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); @@ -541,14 +544,16 @@ static bool btr_no_children(struct btr_node *btrn) } /** - * Find out whether a node is an orphan node. + * Find out whether a node is an orphan. * * \param btrn The buffer tree node. * * \return True if \a btrn has no parent. * - * This function will always return true for the root node. However in case - * nodes have been removed from the tree, other nodes may become orphans too. + * This function returns true for the root node and false for any other node. + * + * After a (non-leaf) node was removed removed from the tree, the function + * returns true for all child nodes. */ bool btr_no_parent(struct btr_node *btrn) { @@ -853,6 +858,8 @@ void btr_splice_out_node(struct btr_node *btrn) ch->parent = btrn->parent; if (btrn->parent) list_move(&ch->node, &btrn->parent->children); + else + list_del(&ch->node); } assert(list_empty(&btrn->children)); btrn->parent = NULL; @@ -1227,6 +1234,16 @@ void btr_get_node_start(struct btr_node *btrn, struct timeval *tv) *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;