[PATCH v2 1/3] merge: setup `opts` later in `checkout_fast_forward()`
- From
- Martin Ågren <martin.agren@gmail.com>
- Date
- May 16, 2018, 16:30 UTC
- Message-ID
- <0b7440f21e9ff7a066802fe1e7cb3078cf4ed2b8.1526488122.git.martin.agren@gmail.com>
- In-Reply-To
- <cover.1526488122.git.martin.agren@gmail.com>
After we initialize the various fields in `opts` but before we actually use them, we might return early. Move the initialization further down, to immediately before we use `opts`.
This limits the scope of `opts` and will help a later commit fix a memory leak without having to worry about those early returns.
This patch is best viewed using something like this (note the tab!): --color-moved --anchored=" trees[nr_trees] = parse_tree_indirect"
Signed-off-by: Martin Ågren <martin.agren@gmail.com> --- merge.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/merge.c b/merge.c index f06a4773d4..f123658e58 100644 --- a/merge.c +++ b/merge.c @@ -94,23 +94,7 @@ int checkout_fast_forward(const struct object_id *head, return -1; memset(&trees, 0, sizeof(trees)); - memset(&opts, 0, sizeof(opts)); memset(&t, 0, sizeof(t)); - if (overwrite_ignore) { - memset(&dir, 0, sizeof(dir)); - dir.flags |= DIR_SHOW_IGNORED; - setup_standard_excludes(&dir); - opts.dir = &dir; - } - - opts.head_idx = 1; - opts.src_index = &the_index; - opts.dst_index = &the_index; - opts.update = 1; - opts.verbose_update = 1; - opts.merge = 1; - opts.fn = twoway_merge; - setup_unpack_trees_porcelain(&opts, "merge"); trees[nr_trees] = parse_tree_indirect(head); if (!trees[nr_trees++]) { @@ -126,6 +110,24 @@ int checkout_fast_forward(const struct object_id *head, parse_tree(trees[i]); init_tree_desc(t+i, trees[i]->buffer, trees[i]->size); } + + memset(&opts, 0, sizeof(opts)); + if (overwrite_ignore) { + memset(&dir, 0, sizeof(dir)); + dir.flags |= DIR_SHOW_IGNORED; + setup_standard_excludes(&dir); + opts.dir = &dir; + } + + opts.head_idx = 1; + opts.src_index = &the_index; + opts.dst_index = &the_index; + opts.update = 1; + opts.verbose_update = 1; + opts.merge = 1; + opts.fn = twoway_merge; + setup_unpack_trees_porcelain(&opts, "merge"); + if (unpack_trees(nr_trees, t, &opts)) { rollback_lock_file(&lock_file); return -1;
-- 2.17.0.583.g9a75a153ac