run-set_allocator.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <ccan/failtest/failtest_override.h>
  2. #include <ccan/talloc/talloc.c>
  3. #include <stdbool.h>
  4. #include <ccan/tap/tap.h>
  5. #include <ccan/failtest/failtest.h>
  6. static unsigned my_malloc_count, my_free_count, my_realloc_count;
  7. static void *my_malloc(size_t size)
  8. {
  9. my_malloc_count++;
  10. return malloc(size);
  11. }
  12. static void my_free(void *ptr)
  13. {
  14. my_free_count++;
  15. free(ptr);
  16. }
  17. static void *my_realloc(void *ptr, size_t size)
  18. {
  19. my_realloc_count++;
  20. ok1(ptr);
  21. ok1(size);
  22. return realloc(ptr, size);
  23. }
  24. int main(int argc, char *argv[])
  25. {
  26. int *p1, *p2;
  27. plan_tests(14);
  28. failtest_init(argc, argv);
  29. talloc_set_allocator(my_malloc, my_free, my_realloc);
  30. p1 = talloc_array(NULL, int, 10);
  31. ok1(my_malloc_count == 1);
  32. ok1(my_free_count == 0);
  33. ok1(my_realloc_count == 0);
  34. p1 = talloc_realloc(NULL, p1, int, 10000);
  35. ok1(my_malloc_count == 1);
  36. ok1(my_free_count == 0);
  37. ok1(my_realloc_count == 1);
  38. p2 = talloc(p1, int);
  39. ok1(my_malloc_count == 2);
  40. ok1(my_free_count == 0);
  41. ok1(my_realloc_count == 1);
  42. talloc_free(p1);
  43. ok1(my_malloc_count == 2);
  44. ok1(my_free_count == 2);
  45. ok1(my_realloc_count == 1);
  46. failtest_exit(exit_status());
  47. }