diff options
Diffstat (limited to 'ensize.c')
-rw-r--r-- | ensize.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ensize.c b/ensize.c new file mode 100644 index 0000000..82835a7 --- /dev/null +++ b/ensize.c @@ -0,0 +1,20 @@ +#include <assert.h> + +#include "ensize.h" +#include "eprintf.h" + +// ensize: realloc p if it is smaller than count given current size +void *ensize(void *p, size_t selem, size_t nelem, size_t *cur, size_t init) +{ + assert(cur != NULL); + + if (*cur >= nelem * selem) + return p; + + if (*cur == 0) + *cur = init * selem; + else + *cur *= 2; + + return erealloc(p, *cur); +} |