run-command: store an optional argv_array
commitc460c0ecdca46be85f6d9c845f9df7ce0e45c3c2
authorJeff King <peff@peff.net>
Thu, 15 May 2014 08:33:26 +0000 (15 04:33 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 15 May 2014 16:49:09 +0000 (15 09:49 -0700)
tree84de4c342f5af7f070a33b974691f3282892426b
parent6308767f0bb58116cb405e1f4f77f5dfc1589920
run-command: store an optional argv_array

All child_process structs need to point to an argv. For
flexibility, we do not mandate the use of a dynamic
argv_array. However, because the child_process does not own
the memory, this can make memory management with a
separate argv_array difficult.

For example, if a function calls start_command but not
finish_command, the argv memory must persist. The code needs
to arrange to clean up the argv_array separately after
finish_command runs. As a result, some of our code in this
situation just leaks the memory.

To help such cases, this patch adds a built-in argv_array to
the child_process, which gets cleaned up automatically (both
in finish_command and when start_command fails).  Callers
may use it if they choose, but can continue to use the raw
argv if they wish.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/api-run-command.txt
run-command.c
run-command.h