#include #include "list.h" #include #include int ptr_equal(const void *a, const void *b) { return a == b; } list_head_t *items; //= list_init(ptr_equal); void meminit() { items = (list_head_t *)malloc(sizeof(list_head_t)); items->cmp = ptr_equal; items->list = NULL; } void item_insert(void *mem) { list_entry_t *element_ptr; element_ptr = items->list; if(element_ptr == NULL) { list_entry_t * new_element = malloc(sizeof(list_entry_t)); new_element->key = mem; new_element->value = NULL; new_element->next = NULL; items->list = new_element; } else { list_entry_t *element = element_ptr; while( element->next != NULL) { element = (element->next); } list_entry_t *new_element = malloc(sizeof(list_entry_t)); new_element->key = mem; new_element->value = NULL; new_element->next = NULL; element->next = new_element; } } void *memalloc(unsigned int size) { void *mem = malloc(size); item_insert(mem); return mem; } int item_remove(list_head_t *list, void *key) { assert(list != NULL); list_entry_t *current = list->list; int (*cmp)(const void *, const void *) = list->cmp; if(!cmp(current->key,key)) { list->list = current->next; free(current->key); free(current->value); free(current); return 1; } while(current->next != NULL) { if(current->next->key == key) { free(current->next->key); free(current->next->value); list_entry_t *old = current->next; current->next = old->next; free(old); return 1; } current = current->next; } return 0; } void memfree(void *obj) { if( item_remove(items, obj)) { free(obj); } } void *memcalloc(unsigned int len, unsigned int size) { void *mem = calloc(len , size); item_insert(mem); return mem; } void freeall() { list_entry_t *item = items->list; list_entry_t *olditem; while(item != NULL) { free(item->key); olditem = item; item = item->next; free(olditem); } free(items); }