Skip to content
  • Martin Ågren's avatar
    unpack_trees_options: free messages when done · 1c41d280
    Martin Ågren authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    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: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarMartin Ågren <martin.agren@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    1c41d280