]> git.ozlabs.org Git - ccan/blobdiff - ccan/talloc/test/run-external-alloc.c
Simplify external allocation (realloc only from Tridge)
[ccan] / ccan / talloc / test / run-external-alloc.c
index 85b3b0140f04d6178ea9efcc3085b1e8752b2294..fb1e17e95f1e14301b2d132b34dd0f0672fff67d 100644 (file)
@@ -5,47 +5,37 @@
 static int ext_alloc_count, ext_free_count, ext_realloc_count;
 static void *expected_parent;
 
-static void *ext_alloc(void *parent, size_t size)
+static void *ext_realloc(const void *parent, void *ptr, size_t size)
 {
        ok1(parent == expected_parent);
-       ext_alloc_count++;
-       return malloc(size);
-}
-
-static void ext_free(void *ptr, void *parent)
-{
-       ok1(parent == expected_parent);
-       ext_free_count++;
-       free(ptr);
-}
-
-static void *ext_realloc(void *ptr, void *parent, size_t size)
-{
-       ok1(parent == expected_parent);
-       ext_realloc_count++;
+       if (ptr == NULL)
+               ext_alloc_count++;
+       if (size == 0)
+               ext_free_count++;
+       if (ptr && size)
+               ext_realloc_count++;
        return realloc(ptr, size);
 }
 
 int main(void)
 {
        char *p, *p2, *head;
-       plan_tests(10);
+       plan_tests(12);
 
-       talloc_external_enable(ext_alloc, ext_free, ext_realloc);
-       head = talloc(NULL, char);
+       expected_parent = NULL;
+       head = talloc_add_external(NULL, ext_realloc);
        assert(head);
-       expected_parent = head;
-
-       talloc_mark_external(head);
+       ok1(ext_alloc_count == 1);
 
+       expected_parent = head;
        p = talloc_array(head, char, 1);
-       ok1(ext_alloc_count == 1);
+       ok1(ext_alloc_count == 2);
        assert(p);
 
        /* Child is also externally allocated */
        expected_parent = p;
        p2 = talloc(p, char);
-       ok1(ext_alloc_count == 2);
+       ok1(ext_alloc_count == 3);
 
        expected_parent = head;
        p = talloc_realloc(NULL, p, char, 1000);