void tests_free_nosize (void *ptr) { struct header **hp = tests_free_find (ptr); struct header *h = *hp; mp_limb_t PATTERN2_var; *hp = h->next; /* unlink */ if (*((mp_limb_t *) ((gmp_intptr_t) ptr - sizeof (mp_limb_t))) != PATTERN1 - PTRLIMB (ptr)) { fprintf (stderr, "in free: redzone clobbered before block\n"); abort (); } PATTERN2_var = PATTERN2 - PTRLIMB (ptr); if (memcmp ((void *) ((gmp_intptr_t) ptr + h->size), &PATTERN2_var, sizeof (mp_limb_t))) { fprintf (stderr, "in free: redzone clobbered after block\n"); abort (); } __gmp_default_free ((void *) ((gmp_intptr_t) ptr - sizeof(mp_limb_t)), h->size + 2 * sizeof (mp_limb_t)); __gmp_default_free (h, sizeof (*h)); }
static void tests_free_nosize (void *ptr) { struct header **hp = tests_free_find (ptr); struct header *h = *hp; *hp = h->next; /* unlink */ __gmp_default_free (ptr, h->size); __gmp_default_free (h, sizeof (*h)); }
void tests_free (void *ptr, size_t size) { struct header **hp = tests_free_find (ptr); struct header *h = *hp; if (h->size != size) { fprintf (stderr, "tests_free(): bad size %lu, should be %lu\n", (unsigned long) size, (unsigned long) h->size); abort (); } tests_free_nosize (ptr); }
void tests_free (void *ptr, size_t size) { struct header **hp = tests_free_find (ptr); struct header *h = *hp; if (h->size != size) { /* Note: we should use the standard %zu to print sizes, but this is not supported by old C implementations. */ printf ("tests_free(): bad size %lu, should be %lu\n", (unsigned long) size, (unsigned long) h->size); abort (); } tests_free_nosize (ptr); }