diff options
Diffstat (limited to 'src/code/listalloc.c')
| -rw-r--r-- | src/code/listalloc.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/code/listalloc.c b/src/code/listalloc.c index 20cc88e1c..b7d97281c 100644 --- a/src/code/listalloc.c +++ b/src/code/listalloc.c @@ -1,64 +1,66 @@ #include <global.h> -ListAlloc* ListAlloc_Init(ListAlloc* this) -{ +ListAlloc* ListAlloc_Init(ListAlloc* this) { this->prev = NULL; this->next = NULL; return this; } -void* ListAlloc_Alloc(ListAlloc* this, u32 size) -{ +void* ListAlloc_Alloc(ListAlloc* this, u32 size) { ListAlloc* ptr; ListAlloc* next; - + ptr = SystemArena_MallocDebug(size + sizeof(ListAlloc), "../listalloc.c", 40); - if (!ptr) + if (!ptr) { return NULL; + } next = this->next; - if (next) + if (next) { next->next = ptr; - + } + ptr->prev = next; ptr->next = NULL; this->next = ptr; - if (!this->prev) + if (!this->prev) { this->prev = ptr; + } return (u8*)ptr + sizeof(ListAlloc); } -void ListAlloc_Free(ListAlloc* this, void* data) -{ +void ListAlloc_Free(ListAlloc* this, void* data) { ListAlloc* ptr; ptr = &((ListAlloc*)data)[-1]; - if (ptr->prev) + if (ptr->prev) { ptr->prev->next = ptr->next; + } - if (ptr->next) + if (ptr->next) { ptr->next->prev = ptr->prev; + } - if (this->prev == ptr) + if (this->prev == ptr) { this->prev = ptr->next; + } - if (this->next == ptr) + if (this->next == ptr) { this->next = ptr->prev; + } SystemArena_FreeDebug(ptr, "../listalloc.c", 72); } -void ListAlloc_FreeAll(ListAlloc* this) -{ +void ListAlloc_FreeAll(ListAlloc* this) { ListAlloc* iter; iter = this->prev; - while (iter) - { + while (iter) { ListAlloc_Free(this, (u8*)iter + sizeof(ListAlloc)); iter = this->prev; } |
