From 1ac36aab83d5ab5f89f6a06f67499c540faf4fb0 Mon Sep 17 00:00:00 2001 From: neal Date: Fri, 15 Feb 2008 15:48:19 +0000 Subject: libhurd-btree/ 2008-02-15 Neal H. Walfield * btree.h (BTREE_(insert)) [!NDEBUG]: Assert that the node pointers are clear. * btree.c (BTREE_(detach)) [!NDEBUG]: Clear ROOT. * btree-test.c (main): Clear allocated nodes. libhurd-mm/ 2008-02-15 Neal H. Walfield * anonymous.c (destroy) [!NDEBUG]: Clear NODE before freeing it. --- libhurd-btree/ChangeLog | 7 +++++++ libhurd-btree/btree-test.c | 44 ++++++++++++++++++++++++++++++++------------ libhurd-btree/btree.c | 11 +++++++++-- libhurd-btree/btree.h | 4 ++++ 4 files changed, 52 insertions(+), 14 deletions(-) (limited to 'libhurd-btree') diff --git a/libhurd-btree/ChangeLog b/libhurd-btree/ChangeLog index 21e3f5e..648c799 100644 --- a/libhurd-btree/ChangeLog +++ b/libhurd-btree/ChangeLog @@ -1,3 +1,10 @@ +2008-02-15 Neal H. Walfield + + * btree.h (BTREE_(insert)) [!NDEBUG]: Assert that the node + pointers are clear. + * btree.c (BTREE_(detach)) [!NDEBUG]: Clear ROOT. + * btree-test.c (main): Clear allocated nodes. + 2008-02-11 Neal H. Walfield * btree-test.c (program_name): Change type to char *. diff --git a/libhurd-btree/btree-test.c b/libhurd-btree/btree-test.c index cee9382..0c34108 100644 --- a/libhurd-btree/btree-test.c +++ b/libhurd-btree/btree-test.c @@ -91,7 +91,7 @@ main (int argc, char *argv[]) { for (i = m; i < sizeof (a) / sizeof (*a); i ++) { - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = a[i]; debug ("Inserting %d... ", a[i]); @@ -159,7 +159,7 @@ main (int argc, char *argv[]) /* Insert elements { B, B + 2, ..., C }. */ for (i = B; i <= C; i += 2) { - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = i; @@ -167,7 +167,11 @@ main (int argc, char *argv[]) fflush (stdout); ret = hurd_btree_int_node_insert (&root, node); assert (! ret); - ret = hurd_btree_int_node_insert (&root, node); + + struct int_node n; + memset (&n, 0, sizeof (n)); + n.key = i; + ret = hurd_btree_int_node_insert (&root, &n); assert (ret); debug ("done\n"); @@ -223,7 +227,7 @@ main (int argc, char *argv[]) /* Add elements { C, C - 2, ..., A }. */ for (i = C; i >= A; i -= 2) { - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = i; @@ -231,8 +235,13 @@ main (int argc, char *argv[]) fflush (stdout); ret = hurd_btree_int_node_insert (&root, node); assert (! ret); - ret = hurd_btree_int_node_insert (&root, node); + + struct int_node n; + memset (&n, 0, sizeof (n)); + n.key = i; + ret = hurd_btree_int_node_insert (&root, &n); assert (ret); + debug ("done\n"); node = hurd_btree_int_node_first (&root); @@ -326,7 +335,7 @@ main (int argc, char *argv[]) /* Insert { B - 2, B - 4, ..., A }. */ for (i = B - 2 ; i >= A; i -= 2) { - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = i; @@ -334,7 +343,11 @@ main (int argc, char *argv[]) fflush (stdout); ret = hurd_btree_int_node_insert (&root, node); assert (! ret); - ret = hurd_btree_int_node_insert (&root, node); + + struct int_node n; + memset (&n, 0, sizeof (n)); + n.key = i; + ret = hurd_btree_int_node_insert (&root, &n); assert (ret); debug ("done\n"); @@ -353,7 +366,7 @@ main (int argc, char *argv[]) /* Add { B, B + 2, ..., C }. */ for (i = B; i <= C; i += 2) { - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = i; @@ -361,7 +374,11 @@ main (int argc, char *argv[]) fflush (stdout); ret = hurd_btree_int_node_insert (&root, node); assert (! ret); - ret = hurd_btree_int_node_insert (&root, node); + + struct int_node n; + memset (&n, 0, sizeof (n)); + n.key = i; + ret = hurd_btree_int_node_insert (&root, &n); assert (ret); debug ("done\n"); @@ -404,7 +421,7 @@ main (int argc, char *argv[]) for (i = A; i <= C; i ++) { debug ("Inserting %d... ", i); - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = i; @@ -416,7 +433,10 @@ main (int argc, char *argv[]) else assert (! ret); - ret = hurd_btree_int_node_insert (&root, node); + struct int_node n; + memset (&n, 0, sizeof (n)); + n.key = i; + ret = hurd_btree_int_node_insert (&root, &n); assert (ret); debug ("\n"); } @@ -537,7 +557,7 @@ main (int argc, char *argv[]) for (j = 0; j < max; j ++) { debug ("Inserting %d... ", j); - node = malloc (sizeof (struct int_node)); + node = calloc (sizeof (struct int_node), 1); assert (node); node->key = j; diff --git a/libhurd-btree/btree.c b/libhurd-btree/btree.c index 4799d22..b7cf660 100644 --- a/libhurd-btree/btree.c +++ b/libhurd-btree/btree.c @@ -1110,7 +1110,7 @@ BTREE_(detach) (BTREE_(t) *btree, BTREE_(node_t) *root) } /* We're done. */ - return; + goto out; } } else @@ -1178,13 +1178,20 @@ BTREE_(detach) (BTREE_(t) *btree, BTREE_(node_t) *root) BTREE_NP_SET (&p->parent, q); BTREE_NP_CHILD_SET (pp, q); } - return; + goto out; } } } if (child != NULL) BTREE_NODE_RED_SET (child, 0); } + + out:; +#ifndef NDEBUG + root->parent.raw = 0; + root->left.raw = 0; + root->right.raw = 0; +#endif } #if 0 diff --git a/libhurd-btree/btree.h b/libhurd-btree/btree.h index a1a1246..1f238f5 100644 --- a/libhurd-btree/btree.h +++ b/libhurd-btree/btree.h @@ -396,6 +396,10 @@ BTREE_(insert) (BTREE_(t) *btree, BTREE_(key_compare_t) compare, struct BTREE_(node_ptr) *nodep; BTREE_(node_t) *pred, *succ, *parent; + assert (! newnode->left.raw); + assert (! newnode->right.raw); + assert (! newnode->parent.raw); + err = BTREE_(find_internal) (btree, compare, key_offset, (void *) newnode + key_offset, &nodep, &pred, &succ, &parent, -- cgit v1.2.3