.
.\"--------------------------------------------------------------------------
.TH alloc 3mLib "8 May 1999" "Straylight/Edgeware" "mLib utilities library"
-.\" @xmalloc
-.\" @xrealloc
-.\" @xstrdup
-.\" @xfree
.\" @x_alloc
+.\" @x_allocv
+.\" @X_NEW
+.\" @X_NEWV
.\" @x_strdup
.\" @x_realloc
+.\" @x_reallocv
+.\" @X_RENEWV
.\" @x_free
.
+.\" @xmalloc
+.\" @xmallocv
+.\" @XNEW
+.\" @XNEWV
+.\" @xstrdup
+.\" @xrealloc
+.\" @xreallocv
+.\" @XRENEWV
+.\" @xfree
+.
.\"--------------------------------------------------------------------------
.SH NAME
alloc \- mLib low-level memory allocation
.B "#include <mLib/alloc.h>"
.PP
.BI "void *x_alloc(arena *" a ", size_t " sz );
+.BI "void *x_allocv(arena *" a ", size_t " n ", size_t " sz );
+.BI "X_NEW(" type " *" p ", arena *" a );
+.BI "X_NEWV(" type " *" p ", arena *" a ", size_t " n );
+.BI "void *x_allocv(arena *" a ", size_t " n ", size_t " sz );
.BI "char *x_strdup(arena *" a ", const char *" s );
.BI "void *x_realloc(arena *" a ", void *" p ", size_t " sz ", size_t " osz );
+.ta \w'\fBvoid *x_reallocv('u
+.BI "void *x_reallocv(arena *" a ", void *" p ,
+.BI " size_t " n ", size_t " on ", size_t " sz );
+.BI "X_RENEWV(" type " *" p ", arena *" a ", size_t " n ", size_t " on );
.BI "void x_free(arena *" a ", void *" p );
.PP
.BI "void *xmalloc(size_t " sz );
-.BI "void *xrealloc(void *" p ", size_t " sz ", size_t " osz );
+.BI "void *xmallocv(size_t " n ", size_t " sz );
+.BI "XNEW(" type " *" p );
+.BI "XNEWV(" type " *" p ", size_t " n );
.BI "char *xstrdup(const char *" s );
+.BI "void *xrealloc(void *" p ", size_t " sz ", size_t " osz );
+.BI "void *xreallocv(void *" p ", size_t " n ", size_t " on ", size_t " sz );
+.BI "XRENEWV(" type " *" p ", size_t " n ", size_t " on );
.BI "void xfree(void *" p );
.fi
.
.PP
The functions
.BR x_alloc ,
+.BR x_allocv ,
.BR x_realloc ,
+.BR x_reallocv ,
.BR x_strdup
and
.BR x_free
is supplied for orthogonality's sake: it's equivalent to calling the
.BR A_FREE (3)
macro.)
+The
+.B x_allocv
+and
+.B x_reallocv
+functions
+allocate space for arrays.
+They check for potential overflow before proceeding.
+.PP
+The
+.B X_NEW
+macro sets a pointer
+.I p
+to point to freshly allocated memory large enough for the type that
+.I p
+points to;
+The
+.B X_NEWV
+macro sets
+.I p
+to point to freshly allocated memory large enough for
+.I n
+elements, each of the type that
+.I p
+points to.
+The
+.B X_RENEWV
+resizes the block that
+.I p
+points to, so that it now has space for
+.I n
+elements of the appropriate type, having previously had space for
+.I on
+elements;
.PP
The
.BR xmalloc ,
+.BR xmallocv ,
+.BR XNEW ,
+.BR XNEWV ,
.BR xrealloc ,
+.BR xreallocv ,
+.BR XRENEWV ,
.BR xstrdup
and
.BR xfree
macros are provided as a convenient interface to failsafe memory
allocation from the current arena
.BR arena_global (3).
+.PP
.
.\"--------------------------------------------------------------------------
.SH "SEE ALSO"