+#include <ccan/failtest/failtest.h>
#include <ccan/rbtree/rbtree.c>
#include <ccan/tap/tap.h>
#include <ccan/talloc/talloc.h>
#include <string.h>
+/* We want to test talloc failure paths. */
+static void *my_malloc(size_t size)
+{
+ return malloc(size);
+}
+
+static void my_free(void *ptr)
+{
+ free(ptr);
+}
+
+static void *my_realloc(void *ptr, size_t size)
+{
+ return realloc(ptr, size);
+}
+
static void *insert_callback(void *param, void *data)
{
ok1(data == param);
int main(void)
{
trbt_tree_t *rb;
- void *ctx = talloc_init("toplevel");
+ void *ctx = talloc_strdup(NULL, "toplevel");
char *data, *data2;
/* This is how many tests you plan to run */
- plan_tests(18);
+ plan_tests(19);
+
+ talloc_set_allocator(my_malloc, my_free, my_realloc);
rb = trbt_create(ctx, 0);
ok1(rb);
/* Insert with callback on existing. */
trbt_insert32_callback(rb, 0, insert_callback, data2);
ok1(strcmp(trbt_lookup32(rb, 0), "insert_callback") == 0);
+ talloc_free(data2);
/* Delete. */
+ data2 = trbt_lookup32(rb, 1);
trbt_delete32(rb, 1);
ok1(trbt_lookup32(rb, 1) == NULL);
ok1(trbt_lookup32(rb, 0));
+ talloc_free(data2);
/* This should free everything. */
talloc_free(trbt_lookup32(rb, 0));
talloc_free(rb);
+ /* No memory leaks? */
+ ok1(talloc_total_blocks(ctx) == 1);
+ talloc_free(ctx);
+
/* This exits depending on whether all tests passed */
- return exit_status();
+ failtest_exit(exit_status());
}