Commit 3a2aabdce127a367aa27a4c27025199230e26c15

Andreas Ericsson 2008-11-22T14:44:47

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>

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__ */