diff --git a/src/common.h b/src/common.h index 6624a3e24..5a6fa6e57 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 #include #include diff --git a/src/util.h b/src/util.h new file mode 100644 index 000000000..45504b7b9 --- /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__ */