diff options
author | Jeff King <peff@peff.net> | 2014-05-15 04:34:18 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-05-15 09:49:11 -0700 |
commit | e0ab2ac6c553cbba5d0275cfd35beb3351cae034 (patch) | |
tree | 0ef63c5251d93f9b6760d5ff84a0fde46875e003 | |
parent | git_connect: use argv_array (diff) | |
download | tgif-e0ab2ac6c553cbba5d0275cfd35beb3351cae034.tar.xz |
get_helper: use run-command's internal argv_array
The get_helper functions dynamically allocates an
argv_array, feeds it to start_command, and then returns. We
then have to later clean up the memory manually after
calling finish_command. We can make this simpler by just
using run-command's internal argv_array, which handles
cleanup for us.
This also prevents a memory leak in the case that
transport_take_over is used, in which case we free the child
in finish_connect, which does not manually free the array.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | transport-helper.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/transport-helper.c b/transport-helper.c index b468e4f88e..fefd34f134 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -101,7 +101,6 @@ static void do_take_over(struct transport *transport) static struct child_process *get_helper(struct transport *transport) { struct helper_data *data = transport->data; - struct argv_array argv = ARGV_ARRAY_INIT; struct strbuf buf = STRBUF_INIT; struct child_process *helper; const char **refspecs = NULL; @@ -123,10 +122,9 @@ static struct child_process *get_helper(struct transport *transport) helper->in = -1; helper->out = -1; helper->err = 0; - argv_array_pushf(&argv, "git-remote-%s", data->name); - argv_array_push(&argv, transport->remote->name); - argv_array_push(&argv, remove_ext_force(transport->url)); - helper->argv = argv_array_detach(&argv, NULL); + argv_array_pushf(&helper->args, "git-remote-%s", data->name); + argv_array_push(&helper->args, transport->remote->name); + argv_array_push(&helper->args, remove_ext_force(transport->url)); helper->git_cmd = 0; helper->silent_exec_failure = 1; @@ -245,7 +243,6 @@ static int disconnect_helper(struct transport *transport) close(data->helper->out); fclose(data->out); res = finish_command(data->helper); - argv_array_free_detached(data->helper->argv); free(data->helper); data->helper = NULL; } |