From 33be32d518e17c8f8971fa7c1fe09adcccd82a67 Mon Sep 17 00:00:00 2001 From: "Douglas B. Rumbaugh" Date: Sun, 2 Nov 2025 17:57:17 -0500 Subject: Added splitting and some basic testing for it --- src/free_list.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/free_list.c b/src/free_list.c index 11fb59b..6c0ff35 100644 --- a/src/free_list.c +++ b/src/free_list.c @@ -22,7 +22,22 @@ free_nd *fl_find_first_fit(free_nd *free_list, size_t size) { } void *fl_split_node(free_nd **free_list, free_nd *split_nd, size_t size) { - /* for now, we'll just remove the node from the free list */ + + ssize_t extra_space = split_nd->size - size - sizeof(header); + if (extra_space >= SPLIT_THRESHOLD) { + free_nd *new_nd = (free_nd*)((char*) (split_nd) + size + sizeof(header)); + new_nd->next = split_nd ->next; + split_nd->next = new_nd; + + new_nd->size = extra_space - sizeof(header); + + header *new_hdr = (header *)((char *)new_nd - sizeof(header)); + new_hdr->magic_number = MAGIC_NUMBER; + new_hdr->size = extra_space - sizeof(header); + + header *old_hdr = (header *)((char *)split_nd- sizeof(header)); + old_hdr->size = size; + } if (*free_list == split_nd) { *free_list = (*free_list)->next; -- cgit v1.2.3