- p = root;
- if (!del((*p)->k))
- t_error("tdelete root \"%s\" failed (returned 0)\n", (*p)->k);
- if (root == p)
- t_error("root remained the same after delete\n");
+ e = *(void**)root;
+ if (!del(e->k))
+ t_error("tdelete root \"%s\" failed (returned 0)\n", e->k);
+
+ for (; count; count--) {
+ e = *(void**)root;
+ if (!tdelete(e, &root, cmp))
+ t_error("tdelete k=%s failed during destruction\n", e->k);
+ }
+ if (root)
+ t_error("tree destruction failed: root is nonzero %p\n", root);