about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRen Kararou <[email protected]>2025-01-30 13:17:56 -0600
committerRen Kararou <[email protected]>2025-01-30 13:17:56 -0600
commit11ff7f4f76d6deb5afab072ded3e115b130069c8 (patch)
tree7463d92c93fbeaf6fb243464a6d08f1b8b17c19d
parent1e468866fc4455193df8d33b1711b6519dd4c721 (diff)
downloadlibspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.tar.gz
libspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.tar.bz2
libspicy-11ff7f4f76d6deb5afab072ded3e115b130069c8.zip
add sfreea(); fix pointer size error
-rw-r--r--inc/salloc.h1
-rw-r--r--src/salloc.c18
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;
+	}
+}
+