Skip to content

Commit

Permalink
run-command: introduce child_process_init()
Browse files Browse the repository at this point in the history
Add a helper function for initializing those struct child_process
variables for which the macro CHILD_PROCESS_INIT can't be used.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Aug 20, 2014
1 parent d318027 commit 483bbd4
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 6 deletions.
8 changes: 6 additions & 2 deletions Documentation/technical/api-run-command.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ produces in the caller in order to process it.
Functions
---------

`child_process_init`

Initialize a struct child_process variable.

`start_command`::

Start a sub-process. Takes a pointer to a `struct child_process`
Expand Down Expand Up @@ -96,8 +100,8 @@ command to run in a sub-process.

The caller:

1. allocates and clears (memset(&chld, 0, sizeof(chld)); or
using CHILD_PROCESS_INIT) a struct child_process variable;
1. allocates and clears (using child_process_init() or
CHILD_PROCESS_INIT) a struct child_process variable;
2. initializes the members;
3. calls start_command();
4. processes the data;
Expand Down
6 changes: 4 additions & 2 deletions connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,8 @@ static struct child_process *git_proxy_connect(int fd[2], char *host)

get_host_and_port(&host, &port);

proxy = xcalloc(1, sizeof(*proxy));
proxy = xmalloc(sizeof(*proxy));
child_process_init(proxy);
argv_array_push(&proxy->args, git_proxy_command);
argv_array_push(&proxy->args, host);
argv_array_push(&proxy->args, port);
Expand Down Expand Up @@ -694,7 +695,8 @@ struct child_process *git_connect(int fd[2], const char *url,
target_host, 0);
free(target_host);
} else {
conn = xcalloc(1, sizeof(*conn));
conn = xmalloc(sizeof(*conn));
child_process_init(conn);

strbuf_addstr(&cmd, prog);
strbuf_addch(&cmd, ' ');
Expand Down
6 changes: 6 additions & 0 deletions run-command.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
# define SHELL_PATH "/bin/sh"
#endif

void child_process_init(struct child_process *child)
{
memset(child, 0, sizeof(*child));
argv_array_init(&child->args);
}

struct child_to_clean {
pid_t pid;
struct child_to_clean *next;
Expand Down
1 change: 1 addition & 0 deletions run-command.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct child_process {
};

#define CHILD_PROCESS_INIT { NULL, ARGV_ARRAY_INIT }
void child_process_init(struct child_process *);

int start_command(struct child_process *);
int finish_command(struct child_process *);
Expand Down
5 changes: 3 additions & 2 deletions transport-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ static struct child_process *get_helper(struct transport *transport)
if (data->helper)
return data->helper;

helper = xcalloc(1, sizeof(*helper));
helper = xmalloc(sizeof(*helper));
child_process_init(helper);
helper->in = -1;
helper->out = -1;
helper->err = 0;
Expand Down Expand Up @@ -395,7 +396,7 @@ static int get_importer(struct transport *transport, struct child_process *fasti
struct child_process *helper = get_helper(transport);
struct helper_data *data = transport->data;
int cat_blob_fd, code;
memset(fastimport, 0, sizeof(*fastimport));
child_process_init(fastimport);
fastimport->in = helper->out;
argv_array_push(&fastimport->args, "fast-import");
argv_array_push(&fastimport->args, debug ? "--stats" : "--quiet");
Expand Down

0 comments on commit 483bbd4

Please sign in to comment.