Beispiel #1
0
void free(void* ptr)
{
	static void (*libc_free)(void*);
	if (libc_free == NULL)
	{
		alloc_has_called_dlsym = true;
		libc_free = (void (*)(void*)) dlsym(RTLD_NEXT, "free");
	}

	libc_free(ptr);
#ifdef ALLOC_DEBUG
	printf("### free(%p)\n", ptr);
#endif
}
Beispiel #2
0
void free(void *ptr)
{
	if (inside_init)
	{
		libc_free(ptr);
		return;
	}
	
	if (!alloc_handle)
		contest_alloc_init();
	
	if (ptr < sbrk_init_done)
	{
		libc_free(ptr);
		return;
	}

	if (ptr)
	{
		alloc_free(ptr);
		contest_tracking();
	}
}
int removeFromList(List * list, void * ptr){
	if (list == NULL || ptr == NULL){
		return -1;
	}

	if (libc_free == NULL){
		libc_free = dlsym(RTLD_NEXT,"free");
		if ((error = dlerror()) != NULL)  {
        fprintf(stderr, "%s\n", error);
        exit(EXIT_FAILURE);
    }
	}

	Node * curr = list -> first;
	if (curr -> ptr == ptr){
		list -> first = curr -> next;
		curr -> next = NULL;
		libc_free(curr);
		return 0;
	}

	Node * prev = curr;
	curr = prev -> next;
	while(curr != NULL){
		if (curr -> ptr == ptr){
			prev -> next = curr -> next;
			curr -> next = NULL;
			libc_free(curr);
			return 0;
		}
		prev = curr;
		curr = curr -> next;
	}

	return -1;
}
void clearList(List * list){
	if (list == NULL) return;
	if (libc_free == NULL){
		libc_free = dlsym(RTLD_NEXT,"free");
		if ((error = dlerror()) != NULL)  {
        fprintf(stderr, "%s\n", error);
        exit(EXIT_FAILURE);
    }
	}

	Node* curr = list -> first;
	while (curr != NULL){
		Node * temp = curr -> next;
		libc_free(curr);
		curr = temp;
	}
	list -> first = NULL;
}