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 /dir.c | |
parent | 6718f1f0d07167128c2d23c15081ea5660e865e9 (diff) | |
download | git-6815e56933f5bb03d6af1eb2d2b356356cf7bf8e.tar.gz git-6815e56933f5bb03d6af1eb2d2b356356cf7bf8e.tar.xz |
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 'dir.c')
-rw-r--r-- | dir.c | 21 |
1 files changed, 10 insertions, 11 deletions
@@ -271,27 +271,26 @@ int excluded(struct dir_struct *dir, const char *pathname) return 0; } -struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len) -{ +static struct dir_entry *dir_entry_new(const char *pathname, int len) { struct dir_entry *ent; - if (cache_name_pos(pathname, len) >= 0) - return NULL; - - if (dir->nr == dir->alloc) { - int alloc = alloc_nr(dir->alloc); - dir->alloc = alloc; - dir->entries = xrealloc(dir->entries, alloc*sizeof(ent)); - } ent = xmalloc(sizeof(*ent) + len + 1); ent->ignored = ent->ignored_dir = 0; ent->len = len; memcpy(ent->name, pathname, len); ent->name[len] = 0; - dir->entries[dir->nr++] = ent; return ent; } +struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len) +{ + if (cache_name_pos(pathname, len) >= 0) + return NULL; + + ALLOC_GROW(dir->entries, dir->nr, dir->alloc); + return dir->entries[dir->nr++] = dir_entry_new(pathname, len); +} + enum exist_status { index_nonexistent = 0, index_directory, |