#include "custom_free.h" #include "other.h" #include "posix_lock.h" #include "block_header.h" void custom_free(heap_t* heap, void *ptr) { size_t size; int fixed_list_id, i; maptable_node_t *current_maptable_node; size = get_size(ptr); fixed_list_id = map_size_to_list(heap, size); posix_lock(heap); if(fixed_list_id != -1) { current_maptable_node = heap->maptable_head; if(fixed_list_id == 0) { set_next(ptr, current_maptable_node->fixed_list_head); current_maptable_node->fixed_list_head = ptr; } else { for(i = 1; i < fixed_list_id; i++) { current_maptable_node = current_maptable_node->next; } set_next(ptr, current_maptable_node->fixed_list_head); current_maptable_node->fixed_list_head = ptr; } } else { // put it in the free list set_next(ptr, heap->free_list_head); heap->free_list_head = ptr; } posix_unlock(heap); }