X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=tree-walk.c;h=bb0ad34c5457d3b812663fb41ece1804fff6ef7a;hb=33a22c1a88d8e8cddd41ea0aa264ee213ce9c1d7;hp=d5a8e096a6065209daab04e3ec77dda2515d3562;hpb=50e1b4166f7a6ced50d6aa4fbdbe315048a0ebc2;p=thirdparty%2Fgit.git diff --git a/tree-walk.c b/tree-walk.c index d5a8e096a6..bb0ad34c54 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -1,6 +1,5 @@ #include "cache.h" #include "tree-walk.h" -#include "unpack-trees.h" #include "dir.h" #include "object-store.h" #include "tree.h" @@ -410,15 +409,20 @@ int traverse_trees(struct index_state *istate, struct traverse_info *info) { int error = 0; - struct name_entry *entry = xmalloc(n*sizeof(*entry)); + struct name_entry entry[MAX_TRAVERSE_TREES]; int i; - struct tree_desc_x *tx = xcalloc(n, sizeof(*tx)); + struct tree_desc_x tx[ARRAY_SIZE(entry)]; struct strbuf base = STRBUF_INIT; int interesting = 1; char *traverse_path; - for (i = 0; i < n; i++) + if (n >= ARRAY_SIZE(entry)) + BUG("traverse_trees() called with too many trees (%d)", n); + + for (i = 0; i < n; i++) { tx[i].d = t[i]; + tx[i].skip = NULL; + } if (info->prev) { strbuf_make_traverse_path(&base, info->prev, @@ -506,10 +510,8 @@ int traverse_trees(struct index_state *istate, if (mask & (1ul << i)) update_extended_entry(tx + i, entry + i); } - free(entry); for (i = 0; i < n; i++) free_extended_entry(tx + i); - free(tx); free(traverse_path); info->traverse_path = NULL; strbuf_release(&base);