summaryrefslogtreecommitdiff
path: root/arena.h
diff options
context:
space:
mode:
Diffstat (limited to 'arena.h')
-rw-r--r--arena.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/arena.h b/arena.h
index a5cc3dd..89c92d6 100644
--- a/arena.h
+++ b/arena.h
@@ -77,9 +77,14 @@ void *arena_alloc(Arena *a, size_t sz, size_t align) {
}
void *arena_realloc(Arena *a, void *old, size_t oldsz, size_t newsz, size_t align) {
- if (old == a->beg - oldsz) a->beg = old;
- else if (old) memcpy(a->beg, old, oldsz);
- return arena_alloc(a, newsz, align);
+ if (old == a->beg - oldsz) {
+ a->beg = (char*)old + newsz;
+ return old;
+ } else {
+ void *p = arena_alloc(a, newsz, align);
+ if (old) memcpy(p, old, oldsz);
+ return p;
+ }
}
#endif