aboutsummaryrefslogtreecommitdiffstats
path: root/ensize.c
diff options
context:
space:
mode:
Diffstat (limited to 'ensize.c')
-rw-r--r--ensize.c20
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);
+}