Add util.h - utility macros ARRAY_SIZE() et al go in util.h, included from common.h Signed-off-by: Andreas Ericsson <ae@op5.se> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
diff --git a/src/common.h b/src/common.h
index 6624a3e..5a6fa6e 100644
--- a/src/common.h
+++ b/src/common.h
@@ -2,6 +2,7 @@
#define INCLUDE_common_h__
#include "cc-compat.h"
+#include "util.h"
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/src/util.h b/src/util.h
new file mode 100644
index 0000000..45504b7
--- /dev/null
+++ b/src/util.h
@@ -0,0 +1,25 @@
+#ifndef INCLUDE_util_h__
+#define INCLUDE_util_h__
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+
+/*
+ * Realloc the buffer pointed at by variable 'x' so that it can hold
+ * at least 'nr' entries; the number of entries currently allocated
+ * is 'alloc', using the standard growing factor alloc_nr() macro.
+ *
+ * DO NOT USE any expression with side-effect for 'x' or 'alloc'.
+ */
+#define alloc_nr(x) (((x)+16)*3/2)
+#define ALLOC_GROW(x, nr, alloc) \
+ do { \
+ if ((nr) > alloc) { \
+ if (alloc_nr(alloc) < (nr)) \
+ alloc = (nr); \
+ else \
+ alloc = alloc_nr(alloc); \
+ x = xrealloc((x), alloc * sizeof(*(x))); \
+ } \
+ } while(0)
+
+#endif /* INCLUDE_util_h__ */