X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=buffer_tree.c;h=fd0a59cad58c0027e3911b08eb5f0bd20a176ed5;hp=5756898bced710406b3c68b8cb1e5cc85a992183;hb=47dbd9413bfe7598c83cc21fcbe8dbe2eeb3545c;hpb=b66dfd41e268e64b65d2990bdec3d3a7e119e234 diff --git a/buffer_tree.c b/buffer_tree.c index 5756898b..fd0a59ca 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2012 Andre Noll + * Copyright (C) 2009-2013 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -295,9 +295,10 @@ struct btr_node *btr_new_node(struct btr_node_description *bnd) 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; } @@ -385,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; @@ -414,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); @@ -441,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); @@ -602,7 +606,7 @@ static size_t btr_get_buffer_by_reference(struct btr_buffer_reference *br, char * * \param btrn The node whose input queue is to be queried. * \param omit Number of bytes to be omitted. - * \param bufp Result pointer. + * \param bufp Result pointer. It is OK to pass \p NULL here. * * If a buffer tree node needs more input data but can not consume the data it * already has (because it might be needed again later) this function can be @@ -878,7 +882,7 @@ size_t btr_get_output_queue_size(struct btr_node *btrn) } /** - * Execute a inter-node command on the given node or on a parent node. + * Execute an inter-node command on the given node or on a parent node. * * \param btrn The node to start looking. * \param command The command to execute. @@ -1225,3 +1229,18 @@ 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; +}