diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/salloc.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/salloc.c b/src/salloc.c index 6c20b41..eada8fa 100644 --- a/src/salloc.c +++ b/src/salloc.c @@ -12,8 +12,8 @@ struct spicy_allocation { }; struct spicy_page { - size_t *start; - size_t *current; + uint8_t *start; + uint8_t *current; size_t free; }; @@ -50,6 +50,7 @@ void *salloc(size_t size) { if (spicy_arena.c == NULL) { spicy_arena.c = malloc(spicy_arena.csize); if (spicy_arena.c == NULL) return NULL; + memset(spicy_arena.c, 0 , spicy_arena.csize); } if (spicy_arena.pages == NULL) { spicy_arena.pages = (struct spicy_page *)spicy_arena.c; @@ -104,6 +105,7 @@ void *scalloc(size_t count, size_t size) { void sfree(void *ptr) { if (ptr == NULL) return; + if (spicy_arena.allocs == NULL) return; for (size_t i = 0; i < spicy_arena.max_allocs; i++) { if (ptr == spicy_arena.allocs[i].start) { spicy_arena.allocs[i].prev = spicy_arena.allocs[i].start; @@ -113,3 +115,15 @@ void sfree(void *ptr) { } } +void sfreea() { + if (spicy_arena.pages != NULL && spicy_arena.c != NULL) { + for (size_t i = 0; i < spicy_arena.pagecount; i++) { + free(spicy_arena.pages[i].start); + } + free(spicy_arena.c); + spicy_arena.pagecount = 0; + spicy_arena.pages = NULL; + spicy_arena.allocs = NULL; + } +} + |