From: Lukas Krickl Date: Mon, 23 Feb 2026 18:53:21 +0000 (+0100) Subject: u_arena: Added basic setup X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=738d1ac88ee40d85d52f4a3d531fc415ed338037;p=lrts%2F.git u_arena: Added basic setup --- diff --git a/src/tests/t_arena.c b/src/tests/t_arena.c index ba243c3..f56be8c 100644 --- a/src/tests/t_arena.c +++ b/src/tests/t_arena.c @@ -13,12 +13,26 @@ int t_test_arena(void) { /* alloc */ p1 = u_arena_alloc(&a, 1); - T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d\n", a.o_index)); - T_ASSERT(a.o_index, ("o_index bad\n")); + T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d start address: %p; ptr: %p\n", + a.o_index, + a.data, + p1)); + T_ASSERT(a.o_index == 1, ("o_index bad\n")); + + p1 = u_arena_alloc(&a, 2); + T_ASSERT((char *)p1 - (char*)a.data == 2, ("Unable to alloc index is at %d start address: %p; ptr: %p\n", + a.o_index, + a.data, + p1)); + T_ASSERT(a.o_index == 3, ("o_index bad\n")); /* reset */ + u_arena_clear(&a); + T_ASSERT(a.o_index == 0, ("Index not 0")); /* free */ + u_arena_free(&a); + T_ASSERT(a.data == LRTS_NULL, ("data not null")); return 0; } diff --git a/src/u_arena.c b/src/u_arena.c index 6992532..9349a78 100644 --- a/src/u_arena.c +++ b/src/u_arena.c @@ -32,8 +32,20 @@ void *u_arena_alloc(struct u_arena *a, u32 n) { } /* get the new start address */ - p = (char *)a->data + a->o_index + a->o_size * n; + p = (char *)a->data + a->o_index * a->o_size; a->o_index = new_o_index; return p; } + +void u_arena_clear(struct u_arena *a) { + lrts_assert(a); + a->o_index = 0; +} + +void u_arena_free(struct u_arena *a) { + lrts_assert(a); + lrts_assert(a->data); + u_free(a->data); + a->data = LRTS_NULL; +}