summaryrefslogtreecommitdiff
path: root/libhurd-btree
diff options
context:
space:
mode:
authorneal <neal>2008-02-15 15:48:19 +0000
committerneal <neal>2008-02-15 15:48:19 +0000
commit1ac36aab83d5ab5f89f6a06f67499c540faf4fb0 (patch)
tree0e94d57d6d09ce057b10334209024b39a4fd5ce5 /libhurd-btree
parent08ebd8b7d06d2dda73fa3c4b6177f249366f8a46 (diff)
libhurd-btree/
2008-02-15 Neal H. Walfield <neal@gnu.org> * 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 <neal@gnu.org> * anonymous.c (destroy) [!NDEBUG]: Clear NODE before freeing it.
Diffstat (limited to 'libhurd-btree')
-rw-r--r--libhurd-btree/ChangeLog7
-rw-r--r--libhurd-btree/btree-test.c44
-rw-r--r--libhurd-btree/btree.c11
-rw-r--r--libhurd-btree/btree.h4
4 files changed, 52 insertions, 14 deletions
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 <neal@gnu.org>
+
+ * 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 <neal@gnu.org>
* 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,