diff options
author | Jeff King <peff@peff.net> | 2007-06-11 09:39:44 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-06-12 23:00:31 -0700 |
commit | 6815e56933f5bb03d6af1eb2d2b356356cf7bf8e (patch) | |
tree | 8e562a2f515f35ceae8ef132ff200119f50d3c9d /cache.h | |
parent | 6718f1f0d07167128c2d23c15081ea5660e865e9 (diff) | |
download | git-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.h | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -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); |