summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWormHeamer2025-12-28 23:56:25 -0500
committerWormHeamer2025-12-28 23:56:25 -0500
commit74c094eeb77e7a25501603ef668333245f726662 (patch)
tree51451a1047300baa601e3a48a036624ba59db506
parentdd3aaf21aa1a1c63f6953449bcb6af7ecc42eb8e (diff)
fix arena_realloc() zeroing memory
-rw-r--r--arena.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/arena.h b/arena.h
index 58c9d38..8e8b145 100644
--- a/arena.h
+++ b/arena.h
@@ -5,6 +5,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <string.h>
typedef struct {
char *start; /* need to release memory */
@@ -24,10 +25,10 @@ void *arena_alloc(Arena *a, size_t n, size_t align);
void *arena_realloc(Arena *a, void *old, size_t oldsz, size_t newsz, size_t align);
#define new(a, t)\
- arena_alloc(a, sizeof(t), _Alignof(__typeof__(t)))
+ memset(arena_alloc(a, sizeof(t), _Alignof(__typeof__(t))), 0, sizeof(t))
#define new_arr(a, t, n)\
- arena_alloc(a, sizeof(t) * (n), _Alignof(__typeof__(t)))
+ memset(arena_alloc(a, sizeof(t) * (n), _Alignof(__typeof__(t))), 0, sizeof(t) * (n))
#define resize(a, x, osz, nsz)\
arena_realloc(a, x, sizeof(*(x)) * (osz),\
@@ -67,7 +68,6 @@ void *arena_alloc(Arena *a, size_t sz, size_t align) {
char *p = a->beg + (-(uintptr_t)a->beg & (align - 1));
if (p >= a->end) FAIL_WITH_MSG("arena out-of-memory");
a->beg = p + sz;
- memset(p, 0, sz);
return p;
}