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>maint
parent
1823bea10f
commit
e0ab2ac6c5
|
@ -101,7 +101,6 @@ static void do_take_over(struct transport *transport)
|
||||||
static struct child_process *get_helper(struct transport *transport)
|
static struct child_process *get_helper(struct transport *transport)
|
||||||
{
|
{
|
||||||
struct helper_data *data = transport->data;
|
struct helper_data *data = transport->data;
|
||||||
struct argv_array argv = ARGV_ARRAY_INIT;
|
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
struct child_process *helper;
|
struct child_process *helper;
|
||||||
const char **refspecs = NULL;
|
const char **refspecs = NULL;
|
||||||
|
@ -123,10 +122,9 @@ static struct child_process *get_helper(struct transport *transport)
|
||||||
helper->in = -1;
|
helper->in = -1;
|
||||||
helper->out = -1;
|
helper->out = -1;
|
||||||
helper->err = 0;
|
helper->err = 0;
|
||||||
argv_array_pushf(&argv, "git-remote-%s", data->name);
|
argv_array_pushf(&helper->args, "git-remote-%s", data->name);
|
||||||
argv_array_push(&argv, transport->remote->name);
|
argv_array_push(&helper->args, transport->remote->name);
|
||||||
argv_array_push(&argv, remove_ext_force(transport->url));
|
argv_array_push(&helper->args, remove_ext_force(transport->url));
|
||||||
helper->argv = argv_array_detach(&argv, NULL);
|
|
||||||
helper->git_cmd = 0;
|
helper->git_cmd = 0;
|
||||||
helper->silent_exec_failure = 1;
|
helper->silent_exec_failure = 1;
|
||||||
|
|
||||||
|
@ -245,7 +243,6 @@ static int disconnect_helper(struct transport *transport)
|
||||||
close(data->helper->out);
|
close(data->helper->out);
|
||||||
fclose(data->out);
|
fclose(data->out);
|
||||||
res = finish_command(data->helper);
|
res = finish_command(data->helper);
|
||||||
argv_array_free_detached(data->helper->argv);
|
|
||||||
free(data->helper);
|
free(data->helper);
|
||||||
data->helper = NULL;
|
data->helper = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue