unpack_trees_options: free messages when done
commit1c41d2805e42d77d943fd3d79ebf5136f74c9ba3
authorMartin Ågren <martin.agren@gmail.com>
Mon, 21 May 2018 14:54:28 +0000 (21 16:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 May 2018 02:59:31 +0000 (22 11:59 +0900)
treef98278a1446ac08bfb9ada55d3cddb9da6470257
parent342c513a4ae100354097a9ca99a080eeb7e70c0b
unpack_trees_options: free messages when done

The strings allocated in `setup_unpack_trees_porcelain()` are never
freed. Provide a function `clear_unpack_trees_porcelain()` to do so and
call it where we use `setup_unpack_trees_porcelain()`. The only
non-trivial user is `unpack_trees_start()`, where we should place the
new call in `unpack_trees_finish()`.

We keep the string pointers in an array, mixing pointers to static
memory and memory that we allocate on the heap. We also keep several
copies of the individual pointers. So we need to make sure that we do
not free what we must not free and that we do not double-free. Let a
separate argv_array take ownership of all the strings we create so that
we can easily free them.

Zero the whole array of string pointers to make sure that we do not
leave any dangling pointers.

Note that we only take responsibility for the memory allocated in
`setup_unpack_trees_porcelain()` and not any other members of the
`struct unpack_trees_options`.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/checkout.c
merge-recursive.c
merge.c
unpack-trees.c
unpack-trees.h