From c42e0b64093306d59372df288f9b4086290623f5 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Mon, 27 Sep 2021 16:33:42 +0000 Subject: [PATCH] unpack-trees: make dir an internal-only struct Avoid accidental misuse or confusion over ownership by clearly making unpack_trees_options.dir an internal-only variable. Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- unpack-trees.c | 7 +++++-- unpack-trees.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 0f0d8ab718..9ccb991084 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1692,9 +1692,12 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options static struct cache_entry *dfc; struct pattern_list pl; int free_pattern_list = 0; + struct dir_struct dir = DIR_INIT; if (len > MAX_UNPACK_TREES) die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES); + if (o->dir) + BUG("o->dir is for internal use only"); trace_performance_enter(); trace2_region_enter("unpack_trees", "unpack_trees", the_repository); @@ -1706,7 +1709,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } if (!o->preserve_ignored) { - CALLOC_ARRAY(o->dir, 1); + o->dir = &dir; o->dir->flags |= DIR_SHOW_IGNORED; setup_standard_excludes(o->dir); } @@ -1874,7 +1877,7 @@ done: clear_pattern_list(&pl); if (o->dir) { dir_clear(o->dir); - FREE_AND_NULL(o->dir); + o->dir = NULL; } trace2_region_leave("unpack_trees", "unpack_trees", the_repository); trace_performance_leave("unpack_trees"); diff --git a/unpack-trees.h b/unpack-trees.h index f98cfd49d7..61da25dafe 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -67,7 +67,6 @@ struct unpack_trees_options { dry_run; const char *prefix; int cache_bottom; - struct dir_struct *dir; struct pathspec *pathspec; merge_fn_t fn; const char *msgs[NB_UNPACK_TREES_WARNING_TYPES]; @@ -89,6 +88,7 @@ struct unpack_trees_options { struct index_state result; struct pattern_list *pl; /* for internal use */ + struct dir_struct *dir; /* for internal use only */ struct checkout_metadata meta; };