.BI "arena *arena_global;"
.BI "arena arena_stdlib;"
-.BI "void *arena_fakerealloc(arena *" a ", void *" p ", size_t " sz );
+.BI "void *arena_fakerealloc(arena *" a ", void *" p ,
+.BI " size_t " sz ", size_t " osz );
.BI "void *a_alloc(arena *" a ", size_t " sz );
-.BI "void *a_realloc(arena *" a ", void *" p ", size_t " sz );
+.BI "void *a_realloc(arena *" a ", void *" p ", size_t " sz ", size_t " osz );
.BI "void a_free(arena *" a );
.BI "void *A_ALLOC(arena *" a ", size_t " sz );
-.BI "void *A_REALLOC(arena *" a ", void *" p ", size_t " sz );
+.BI "void *A_REALLOC(arena *" a ", void *" p ", size_t " sz ", size_t " osz );
.BI "void A_FREE(arena *" a );
.fi
.SH "DESCRIPTION"
convenient interface to memory allocation, see
.BR alloc (3).
.PP
+.B Note:
+The
+.B realloc
+function has an extra argument
+.I osz
+specifying the old size of the block. This is for the benefit of arena
+handlers which can't easily find the old block's size.
+.PP
.SS "Defining new arenas"
An
.B arena
Allocates a block of memory, of at least
.I sz
bytes in size, appropriately aligned, and returns its address.
+.nf
.TP
-.BI "void *(*" realloc ")(arena *" a ", void *" p ", size_t " sz );
+.BI "void *(*" realloc ")(arena *" a ", void *" p ", size_t " sz ", size_t " osz );
+.fi
Resizes the block pointed to by
.IR p ,
+with
+.I osz
+interesting bytes in it,
so that it is at least
.I sz
bytes long. You can use