summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2007-06-11 09:39:44 -0400
committerJunio C Hamano <gitster@pobox.com>2007-06-12 23:00:31 -0700
commit6815e56933f5bb03d6af1eb2d2b356356cf7bf8e (patch)
tree8e562a2f515f35ceae8ef132ff200119f50d3c9d /cache.h
parent6718f1f0d07167128c2d23c15081ea5660e865e9 (diff)
downloadgit-6815e56933f5bb03d6af1eb2d2b356356cf7bf8e.tar.gz
refactor dir_add_name
This is in preparation for keeping two entry lists in the dir object. This patch adds and uses the ALLOC_GROW() macro, which implements the commonly used idiom of growing a dynamic array using the alloc_nr function (not just in dir.c, but everywhere). We also move creation of a dir_entry to dir_entry_new. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/cache.h b/cache.h
index 5e7381eb1e..6761554e6c 100644
--- a/cache.h
+++ b/cache.h
@@ -225,6 +225,21 @@ extern void verify_non_filename(const char *prefix, const char *name);
#define alloc_nr(x) (((x)+16)*3/2)
+/*
+ * 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_GROW(x, nr, alloc) \
+ do { \
+ if ((nr) >= alloc) { \
+ alloc = alloc_nr(alloc); \
+ x = xrealloc((x), alloc * sizeof(*(x))); \
+ } \
+ } while(0)
+
/* Initialize and use the cache information */
extern int read_index(struct index_state *);
extern int read_index_from(struct index_state *, const char *path);