René Scharfe <[email protected]> writes:
> Avoid duplication by moving the code to release allocated memory for
> arguments and environment to its own function, child_process_clear().
> Export it to provide a counterpart to child_process_init().
>
> Signed-off-by: Rene Scharfe <[email protected]>
> ---
Hmm, is this _deinit() Stefan added to his series recently?
> Documentation/technical/api-run-command.txt | 7 +++++++
> run-command.c | 15 +++++++++------
> run-command.h | 1 +
> 3 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/technical/api-run-command.txt
> b/Documentation/technical/api-run-command.txt
> index a9fdb45..8bf3e37 100644
> --- a/Documentation/technical/api-run-command.txt
> +++ b/Documentation/technical/api-run-command.txt
> @@ -46,6 +46,13 @@ Functions
> The argument dir corresponds the member .dir. The argument env
> corresponds to the member .env.
>
> +`child_process_clear`::
> +
> + Release the memory associated with the struct child_process.
> + Most users of the run-command API don't need to call this
> + function explicitly because `start_command` invokes it on
> + failure and `finish_command` calls it automatically already.
> +
> The functions above do the following:
>
> . If a system call failed, errno is set and -1 is returned. A diagnostic
> diff --git a/run-command.c b/run-command.c
> index e17e456..13fa452 100644
> --- a/run-command.c
> +++ b/run-command.c
> @@ -11,6 +11,12 @@ void child_process_init(struct child_process *child)
> argv_array_init(&child->env_array);
> }
>
> +void child_process_clear(struct child_process *child)
> +{
> + argv_array_clear(&child->args);
> + argv_array_clear(&child->env_array);
> +}
> +
> struct child_to_clean {
> pid_t pid;
> struct child_to_clean *next;
> @@ -327,8 +333,7 @@ int start_command(struct child_process *cmd)
> fail_pipe:
> error("cannot create %s pipe for %s: %s",
> str, cmd->argv[0], strerror(failed_errno));
> - argv_array_clear(&cmd->args);
> - argv_array_clear(&cmd->env_array);
> + child_process_clear(cmd);
> errno = failed_errno;
> return -1;
> }
> @@ -513,8 +518,7 @@ fail_pipe:
> close_pair(fderr);
> else if (cmd->err)
> close(cmd->err);
> - argv_array_clear(&cmd->args);
> - argv_array_clear(&cmd->env_array);
> + child_process_clear(cmd);
> errno = failed_errno;
> return -1;
> }
> @@ -540,8 +544,7 @@ fail_pipe:
> int finish_command(struct child_process *cmd)
> {
> int ret = wait_or_whine(cmd->pid, cmd->argv[0], 0);
> - argv_array_clear(&cmd->args);
> - argv_array_clear(&cmd->env_array);
> + child_process_clear(cmd);
> return ret;
> }
>
> diff --git a/run-command.h b/run-command.h
> index 5428b04..12bb26c 100644
> --- a/run-command.h
> +++ b/run-command.h
> @@ -47,6 +47,7 @@ struct child_process {
>
> #define CHILD_PROCESS_INIT { NULL, ARGV_ARRAY_INIT, ARGV_ARRAY_INIT }
> void child_process_init(struct child_process *);
> +void child_process_clear(struct child_process *);
>
> int start_command(struct child_process *);
> int finish_command(struct child_process *);
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html