diff options
author | Ren Kararou <[email protected]> | 2025-01-30 13:17:56 -0600 |
---|---|---|
committer | Ren Kararou <[email protected]> | 2025-01-30 13:17:56 -0600 |
commit | 11ff7f4f76d6deb5afab072ded3e115b130069c8 (patch) | |
tree | 7463d92c93fbeaf6fb243464a6d08f1b8b17c19d | |
parent | 1e468866fc4455193df8d33b1711b6519dd4c721 (diff) | |
download | libspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.tar.gz libspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.tar.bz2 libspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.zip |
add sfreea(); fix pointer size error
-rw-r--r-- | inc/salloc.h | 1 | ||||
-rw-r--r-- | src/salloc.c | 18 |
2 files changed, 17 insertions, 2 deletions
diff --git a/inc/salloc.h b/inc/salloc.h index d9d85da..4a6432e 100644 --- a/inc/salloc.h +++ b/inc/salloc.h @@ -7,6 +7,7 @@ int salloc_configure(size_t pagesize, size_t max_pages, size_t max_allocs); void *salloc(size_t size); void *scalloc(size_t number, size_t count); void sfree(void *ptr); +void sfreea(void); #endif 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; + } +} + |