diff options
| -rw-r--r-- | arena.h | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -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 |
