run-command: introduce CHILD_PROCESS_INIT
PATCH 1/1 run-command: introduce CHILD_PROCESS_INIT
Most struct child_process variables are cleared using memset right after declaration. Provide a macro, CHILD_PROCESS_INIT, that can be used to initialize them statically instead. That's shorter, doesn't require a function call and is slightly more readable (especially given that we already have similar macros like STRBUF_INIT, ARGV_ARRAY_INIT etc.).
--- Documentation/technical/api-run-command.txt | 4 ++-- archive-tar.c | 3 +-- builtin/add.c | 3 +-- builtin/commit.c | 3 +-- builtin/help.c | 3 +-- builtin/merge.c | 3 +-- builtin/notes.c | 3 +-- builtin/remote-ext.c | 3 +-- builtin/repack.c | 3 +-- builtin/replace.c | 4 ++-- builtin/verify-pack.c | 3 +-- bundle.c | 6 ++---- connected.c | 3 +-- convert.c | 3 +-- credential-cache.c | 3 +-- credential.c | 3 +-- daemon.c | 8 +++----- diff.c | 3 +-- editor.c | 3 +-- fetch-pack.c | 3 +-- gpg-interface.c | 6 ++---- http-backend.c | 3 +-- http.c | 3 +-- imap-send.c | 2 +- prompt.c | 3 +-- remote-curl.c | 3 +-- remote-testsvn.c | 3 +-- run-command.h | 2 ++ send-pack.c | 3 +-- submodule.c | 21 +++++++-------------- test-run-command.c | 4 +--- test-subprocess.c | 3 +-- transport.c | 12 ++++-------- upload-pack.c | 3 +-- wt-status.c | 3 +-- 35 files changed, 51 insertions(+), 93 deletions(-)
Documentation/technical/api-run-command.txt +2 -2
@@ -96,8 +96,8 @@ command to run in a sub-process. The caller: -1. allocates and clears (memset(&chld, 0, sizeof(chld));) a - struct child_process variable; +1. allocates and clears (memset(&chld, 0, sizeof(chld)); or + using CHILD_PROCESS_INIT) a struct child_process variable; 2. initializes the members; 3. calls start_command(); 4. processes the data;
archive-tar.c +1 -2
@@ -395,7 +395,7 @@ static int write_tar_filter_archive(const struct archiver *ar, struct archiver_args *args) {struct strbuf cmd =STRBUF_INIT ; -struct child_process filter; +struct child_process filter =CHILD_PROCESS_INIT ;const char *argv[2 ];int r;
@@ -406,7 +406,6 @@ static int write_tar_filter_archive(const struct archiver *ar,if (args->compression_level >=0 )strbuf_addf (&cmd," -%d" , args->compression_level); -memset (&filter,0 ,sizeof (filter)); argv[0 ] = cmd.buf; argv[1 ] =NULL ; filter.argv = argv;
builtin/add.c +1 -2
@@ -180,7 +180,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)char *file =git_pathdup ("ADD_EDIT.patch" );const char *apply_argv[] = {"apply" ,"--recount" ,"--cached" ,NULL ,NULL }; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct rev_info rev;int out;struct stat st;
@@ -214,7 +214,6 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (!st.st_size)die (_ ("Empty patch. Aborted." )); -memset (&child,0 ,sizeof (child)); child.git_cmd =1 ; child.argv = apply_argv;if (run_command (&child))
builtin/commit.c +1 -2
@@ -1508,7 +1508,7 @@ static int run_rewrite_hook(const unsigned char *oldsha1, {/* oldsha1 SP newsha1 LF NUL */ static char buf[2 *40 +3 ]; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;const char *argv[3 ];int code;size_t n;
@@ -1520,7 +1520,6 @@ static int run_rewrite_hook(const unsigned char *oldsha1, argv[1 ] ="amend" ; argv[2 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.argv = argv; proc.in =-1 ; proc.stdout_to_stderr =1 ;
builtin/help.c +1 -2
@@ -79,12 +79,11 @@ static const char *get_man_viewer_info(const char *name)static int check_emacsclient_version (void ) {struct strbuf buffer =STRBUF_INIT ; -struct child_process ec_process; +struct child_process ec_process =CHILD_PROCESS_INIT ;const char *argv_ec[] = {"emacsclient" ,"--version" ,NULL };int version;/* emacsclient prints its version number on stderr */ -memset (&ec_process,0 ,sizeof (ec_process)); ec_process.argv = argv_ec; ec_process.err =-1 ; ec_process.stdout_to_stderr =1 ;
builtin/merge.c +1 -2
@@ -237,11 +237,10 @@ static void drop_save(void)static int save_state (unsigned char *stash) {int len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;struct strbuf buffer =STRBUF_INIT ;const char *argv[] = {"stash" ,"create" ,NULL }; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.out =-1 ; cp.git_cmd =1 ;
builtin/notes.c +1 -2
@@ -122,12 +122,11 @@ static void write_commented_object(int fd, const unsigned char *object) {const char *show_args[5 ] = {"show" ,"--stat" ,"--no-notes" ,sha1_to_hex (object),NULL }; -struct child_process show; +struct child_process show =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;struct strbuf cbuf =STRBUF_INIT ;/* Invoke "git show --stat --no-notes $object" */ -memset (&show,0 ,sizeof (show)); show.argv = show_args; show.no_stdin =1 ; show.out =-1 ;
builtin/remote-ext.c +1 -2
@@ -179,9 +179,8 @@ static void send_git_request(int stdin_fd, const char *serv, const char *repo,static int run_child (const char *arg,const char *service) {int r; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ; -memset (&child,0 ,sizeof (child)); child.in =-1 ; child.out =-1 ; child.err =0 ;
builtin/repack.c +1 -2
@@ -133,7 +133,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) {".idx"}, {".bitmap", 1}, }; -struct child_process cmd; +struct child_process cmd =CHILD_PROCESS_INIT ;struct string_list_item *item;struct argv_array cmd_args =ARGV_ARRAY_INIT ;struct string_list names =STRING_LIST_INIT_DUP ;
@@ -250,7 +250,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)argv_array_push (&cmd_args, packtmp); -memset (&cmd,0 ,sizeof (cmd)); cmd.argv = cmd_args.argv; cmd.git_cmd =1 ; cmd.out =-1 ;
builtin/replace.c +2 -2
@@ -197,7 +197,7 @@ static int replace_object(const char *object_ref, const char *replace_ref, int fstatic void export_object (const unsigned char *sha1,enum object_type type,int raw,const char *filename) { -struct child_process cmd = {NULL }; +struct child_process cmd =CHILD_PROCESS_INIT ;int fd; fd =open (filename,O_WRONLY |O_CREAT |O_TRUNC ,0666 );
@@ -234,7 +234,7 @@ static void import_object(unsigned char *sha1, enum object_type type,if (!raw && type ==OBJ_TREE ) {const char *argv[] = {"mktree" ,NULL }; -struct child_process cmd = { argv }; +struct child_process cmd =CHILD_PROCESS_INIT ;struct strbuf result =STRBUF_INIT ; cmd.argv = argv;
builtin/verify-pack.c +1 -2
@@ -8,7 +8,7 @@static int verify_one_pack (const char *path,unsigned int flags) { -struct child_process index_pack; +struct child_process index_pack =CHILD_PROCESS_INIT ;const char *argv[] = {"index-pack" ,NULL ,NULL ,NULL };struct strbuf arg =STRBUF_INIT ;int verbose = flags &VERIFY_PACK_VERBOSE ;
@@ -32,7 +32,6 @@ static int verify_one_pack(const char *path, unsigned int flags)strbuf_addstr (&arg,".pack" ); argv[2 ] = arg.buf; -memset (&index_pack,0 ,sizeof (index_pack)); index_pack.argv = argv; index_pack.git_cmd =1 ;
bundle.c +2 -4
@@ -240,7 +240,7 @@ int create_bundle(struct bundle_header *header, const char *path,int i, ref_count =0 ;struct strbuf buf =STRBUF_INIT ;struct rev_info revs; -struct child_process rls; +struct child_process rls =CHILD_PROCESS_INIT ;FILE *rls_fout; bundle_to_stdout = !strcmp (path,"-" );
@@ -258,7 +258,6 @@ int create_bundle(struct bundle_header *header, const char *path,init_revisions (&revs,NULL );/* write prerequisites */ -memset (&rls,0 ,sizeof (rls));argv_array_pushl (&rls.args,"rev-list" ,"--boundary" ,"--pretty=oneline" ,NULL );
@@ -417,14 +416,13 @@ int unbundle(struct bundle_header *header, int bundle_fd, int flags) {const char *argv_index_pack[] = {"index-pack" ,"--fix-thin" ,"--stdin" ,NULL ,NULL }; -struct child_process ip; +struct child_process ip =CHILD_PROCESS_INIT ;if (flags &BUNDLE_VERBOSE ) argv_index_pack[3 ] ="-v" ;if (verify_bundle (header,0 ))return -1 ; -memset (&ip,0 ,sizeof (ip)); ip.argv = argv_index_pack; ip.in = bundle_fd; ip.no_stdout =1 ;
connected.c +1 -2
@@ -25,7 +25,7 @@ static int check_everything_connected_real(sha1_iterate_fn fn,struct transport *transport, const char *shallow_file) { - struct child_process rev_list; + struct child_process rev_list = CHILD_PROCESS_INIT;const char *argv[9 ];char commit[41 ];unsigned char sha1[20 ];
@@ -60,7 +60,6 @@ static int check_everything_connected_real(sha1_iterate_fn fn, argv[ac++] ="--quiet" ; argv[ac] =NULL ; -memset (&rev_list,0 ,sizeof (rev_list)); rev_list.argv = argv; rev_list.git_cmd =1 ; rev_list.in =-1 ;
convert.c +1 -2
@@ -321,7 +321,7 @@ static int filter_buffer(int in, int out, void *data)/* * Spawn cmd and feed the buffer contents through its stdin. */ -struct child_process child_process; +struct child_process child_process =CHILD_PROCESS_INIT ;struct filter_params *params = (struct filter_params *)data;int write_err, status;const char *argv[] = {NULL ,NULL };
@@ -344,7 +344,6 @@ static int filter_buffer(int in, int out, void *data) argv[0 ] = cmd.buf; -memset (&child_process,0 ,sizeof (child_process)); child_process.argv = argv; child_process.use_shell =1 ; child_process.in =-1 ;
credential-cache.c +1 -2
@@ -37,12 +37,11 @@ static int send_request(const char *socket, const struct strbuf *out)static void spawn_daemon (const char *socket) { -struct child_process daemon; +struct child_process daemon =CHILD_PROCESS_INIT ;const char *argv[] = {NULL ,NULL ,NULL };char buf[128 ];int r; -memset (&daemon,0 ,sizeof (daemon)); argv[0 ] ="git-credential-cache--daemon" ; argv[1 ] = socket; daemon.argv = argv;
credential.c +1 -2
@@ -205,11 +205,10 @@ static int run_credential_helper(struct credential *c, const char *cmd, int want_output) { -struct child_process helper; +struct child_process helper =CHILD_PROCESS_INIT ;const char *argv[] = {NULL ,NULL };FILE *fp; -memset (&helper,0 ,sizeof (helper)); argv[0 ] = cmd; helper.argv = argv; helper.use_shell =1 ;
daemon.c +3 -5
@@ -259,7 +259,7 @@ static const char *access_hook;static int run_access_hook (struct daemon_service *service,const char *dir,const char *path) { -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;const char *argv[8 ];const char **arg = argv;
@@ -277,7 +277,6 @@ static int run_access_hook(struct daemon_service *service, const char *dir, cons *arg =NULL ;#undef STRARG -memset (&child,0 ,sizeof (child)); child.use_shell =1 ; child.argv = argv; child.no_stdin =1 ;
@@ -406,9 +405,8 @@ static void copy_to_log(int fd)static int run_service_command (const char **argv) { -struct child_process cld; +struct child_process cld =CHILD_PROCESS_INIT ; -memset (&cld,0 ,sizeof (cld)); cld.argv = argv; cld.git_cmd =1 ; cld.err =-1 ;
@@ -733,7 +731,7 @@ static void check_dead_children(void)static char **cld_argv;static void handle (int incoming,struct sockaddr *addr,socklen_t addrlen) { -struct child_process cld = {NULL }; +struct child_process cld =CHILD_PROCESS_INIT ;char addrbuf[300 ] ="REMOTE_ADDR=" , portbuf[300 ];char *env[] = { addrbuf, portbuf,NULL };
diff.c +1 -2
@@ -4931,7 +4931,7 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,struct diff_tempfile *temp;const char *argv[3 ];const char **arg = argv; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;int err =0 ;
@@ -4940,7 +4940,6 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec, *arg++ = temp->name; *arg =NULL ; -memset (&child,0 ,sizeof (child)); child.use_shell =1 ; child.argv = argv; child.out =-1 ;
editor.c +1 -2
@@ -38,10 +38,9 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *enif (strcmp (editor,":" )) {const char *args[] = { editor,real_path (path),NULL }; -struct child_process p; +struct child_process p =CHILD_PROCESS_INIT ;int ret, sig; -memset (&p,0 ,sizeof (p)); p.argv = args; p.env = env; p.use_shell =1 ;
fetch-pack.c +1 -2
@@ -666,7 +666,7 @@ static int get_pack(struct fetch_pack_args *args,char hdr_arg[256 ];const char **av, *cmd_name;int do_keep = args->keep_pack; -struct child_process cmd; +struct child_process cmd =CHILD_PROCESS_INIT ;int ret;memset (&demux,0 ,sizeof (demux));
@@ -685,7 +685,6 @@ static int get_pack(struct fetch_pack_args *args,else demux.out = xd[0 ]; -memset (&cmd,0 ,sizeof (cmd)); cmd.argv = argv; av = argv; *hdr_arg =0 ;
gpg-interface.c +2 -4
@@ -55,12 +55,11 @@ const char *get_signing_key(void)*/ int sign_buffer (struct strbuf *buffer,struct strbuf *signature,const char *signing_key) { -struct child_process gpg; +struct child_process gpg =CHILD_PROCESS_INIT ;const char *args[4 ];ssize_t len;size_t i, j, bottom; -memset (&gpg,0 ,sizeof (gpg)); gpg.argv = args; gpg.in =-1 ; gpg.out =-1 ;
@@ -116,7 +115,7 @@ int verify_signed_buffer(const char *payload, size_t payload_size, const char *signature, size_t signature_size, struct strbuf *gpg_output, struct strbuf *gpg_status) { - struct child_process gpg; + struct child_process gpg = CHILD_PROCESS_INIT;const char *args_gpg[] = {NULL ,"--status-fd=1" ,"--verify" ,"FILE" ,"-" ,NULL };char path[PATH_MAX ];int fd, ret;
@@ -133,7 +132,6 @@ int verify_signed_buffer(const char *payload, size_t payload_size, path, strerror(errno));close (fd); -memset (&gpg,0 ,sizeof (gpg)); gpg.argv = args_gpg; gpg.in =-1 ; gpg.out =-1 ;
http-backend.c +1 -2
@@ -323,7 +323,7 @@ static void run_service(const char **argv)const char *host =getenv ("REMOTE_ADDR" );struct argv_array env =ARGV_ARRAY_INIT ;int gzipped_request =0 ; -struct child_process cld; +struct child_process cld =CHILD_PROCESS_INIT ;if (encoding && !strcmp (encoding,"gzip" )) gzipped_request =1 ;
@@ -341,7 +341,6 @@ static void run_service(const char **argv)argv_array_pushf (&env,"GIT_COMMITTER_EMAIL=%s@http.%s" , user, host); -memset (&cld,0 ,sizeof (cld)); cld.argv = argv; cld.env = env.argv;if (gzipped_request)
http.c +1 -2
@@ -1332,7 +1332,7 @@ int finish_http_pack_request(struct http_pack_request *preq)struct packed_git **lst;struct packed_git *p = preq->target;char *tmp_idx; -struct child_process ip; +struct child_process ip =CHILD_PROCESS_INIT ;const char *ip_argv[8 ];close_pack_index (p);
@@ -1355,7 +1355,6 @@ int finish_http_pack_request(struct http_pack_request *preq) ip_argv[3 ] = preq->tmpfile; ip_argv[4 ] =NULL ; -memset (&ip,0 ,sizeof (ip)); ip.argv = ip_argv; ip.git_cmd =1 ; ip.no_stdin =1 ;
imap-send.c +1 -1
@@ -962,7 +962,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc)if (srvc->tunnel) {const char *argv[] = { srvc->tunnel,NULL }; -struct child_process tunnel = {NULL }; +struct child_process tunnel =CHILD_PROCESS_INIT ;imap_info ("Starting tunnel '%s'... " , srvc->tunnel);
prompt.c +1 -2
@@ -6,7 +6,7 @@static char *do_askpass (const char *cmd,const char *prompt) { -struct child_process pass; +struct child_process pass =CHILD_PROCESS_INIT ;const char *args[3 ];static struct strbuf buffer =STRBUF_INIT ;int err =0 ;
@@ -15,7 +15,6 @@ static char *do_askpass(const char *cmd, const char *prompt) args[1 ] = prompt; args[2 ] =NULL ; -memset (&pass,0 ,sizeof (pass)); pass.argv = args; pass.out =-1 ;
remote-curl.c +1 -2
@@ -623,10 +623,9 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads)const char *svc = rpc->service_name;struct strbuf buf =STRBUF_INIT ;struct strbuf *preamble = rpc->stdin_preamble; -struct child_process client; +struct child_process client =CHILD_PROCESS_INIT ;int err =0 ; -memset (&client,0 ,sizeof (client)); client.in =-1 ; client.out =-1 ; client.git_cmd =1 ;
remote-testsvn.c +1 -2
@@ -175,7 +175,7 @@ static int cmd_import(const char *line)char *note_msg;unsigned char head_sha1[20 ];unsigned int startrev; -struct child_process svndump_proc; +struct child_process svndump_proc =CHILD_PROCESS_INIT ;const char *command ="svnrdump" ;if (read_ref (private_ref, head_sha1))
@@ -200,7 +200,6 @@ static int cmd_import(const char *line)if (dumpin_fd <0 )die_errno ("Couldn't open svn dump file %s." , url); }else { -memset (&svndump_proc,0 ,sizeof (struct child_process )); svndump_proc.out =-1 ;argv_array_push (&svndump_proc.args, command);argv_array_push (&svndump_proc.args,"dump" );
run-command.h +2 -0
@@ -44,6 +44,8 @@ struct child_process { unsigned clean_on_exit:1; }; +#define CHILD_PROCESS_INIT { NULL } +int start_command (struct child_process *);int finish_command (struct child_process *);int run_command (struct child_process *);
send-pack.c +1 -2
@@ -47,7 +47,7 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, struNULL , NULL, }; -struct child_process po; +struct child_process po =CHILD_PROCESS_INIT ;int i; i =4 ;
@@ -59,7 +59,6 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru argv[i++] ="-q" ;if (args->progress) argv[i++] ="--progress" ; -memset (&po,0 ,sizeof (po)); po.argv = argv; po.in =-1 ; po.out = args->stateless_rpc ?-1 : fd;
submodule.c +7 -14
@@ -433,13 +433,12 @@ static int submodule_needs_pushing(const char *path, const unsigned char sha1[20return 0 ;if (for_each_remote_ref_submodule (path, has_remote,NULL ) >0 ) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"rev-list" ,NULL ,"--not" ,"--remotes" ,"-n" ,"1" ,NULL };struct strbuf buf =STRBUF_INIT ;int needs_pushing =0 ; argv[1 ] =sha1_to_hex (sha1); -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -524,10 +523,9 @@ static int push_submodule(const char *path)return 1 ;if (for_each_remote_ref_submodule (path, has_remote,NULL ) >0 ) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"push" ,NULL }; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -569,12 +567,11 @@ static int is_submodule_commit_present(const char *path, unsigned char sha1[20])if (!add_submodule_odb (path) &&lookup_commit_reference (sha1)) {/* Even if the submodule is checked out and the commit is * present, make sure it is reachable from a ref. */ -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"rev-list" ,"-n" ,"1" ,NULL ,"--not" ,"--all" ,NULL };struct strbuf buf =STRBUF_INIT ; argv[3 ] =sha1_to_hex (sha1); -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -695,7 +692,7 @@ int fetch_populated_submodules(const struct argv_array *options, int quiet) {int i, result =0 ; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;struct argv_array argv =ARGV_ARRAY_INIT ;struct string_list_item *name_for_path;const char *work_tree =get_git_work_tree ();
@@ -711,7 +708,6 @@ int fetch_populated_submodules(const struct argv_array *options,argv_array_push (&argv,"--recurse-submodules-default" );/* default value, "--submodule-prefix" and its value are added later */ -memset (&cp,0 ,sizeof (cp)); cp.env = local_repo_env; cp.git_cmd =1 ; cp.no_stdin =1 ;
@@ -794,7 +790,7 @@ out:unsigned is_submodule_modified (const char *path,int ignore_untracked) {ssize_t len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"status" ,"--porcelain" ,
@@ -821,7 +817,6 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)if (ignore_untracked) argv[2 ] ="-uno" ; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -862,7 +857,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)int submodule_uses_gitfile (const char *path) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"submodule" ,"foreach" ,
@@ -883,7 +878,6 @@ int submodule_uses_gitfile(const char *path)strbuf_release (&buf);/* Now test that all nested submodules use a gitfile too */ -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -901,7 +895,7 @@ int ok_to_remove_submodule(const char *path) {struct stat st;ssize_t len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"status" ,"--porcelain" ,
@@ -918,7 +912,6 @@ int ok_to_remove_submodule(const char *path)if (!submodule_uses_gitfile (path))return 0 ; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
test-run-command.c +1 -3
@@ -15,9 +15,7 @@int main (int argc,char **argv) { -struct child_process proc; - -memset (&proc,0 ,sizeof (proc)); +struct child_process proc =CHILD_PROCESS_INIT ;if (argc <3 )return 1 ;
test-subprocess.c +1 -2
@@ -3,7 +3,7 @@int main (int argc,char **argv) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;int nogit =0 ;setup_git_directory_gently (&nogit);
@@ -13,7 +13,6 @@ int main(int argc, char **argv)setup_work_tree (); argv++; } -memset (&cp,0 ,sizeof (cp)); cp.git_cmd =1 ; cp.argv = (const char **)argv +1 ;return run_command (&cp);
transport.c +4 -8
@@ -201,7 +201,7 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push) {struct strbuf buf =STRBUF_INIT , temp_dir =STRBUF_INIT ;struct ref dummy = {NULL }, *tail = &dummy; -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ;const char *args[5 ];int temp_dir_len;
@@ -218,7 +218,6 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)strbuf_addstr (&buf,rsync_url (transport->url));strbuf_addstr (&buf,"/refs" ); -memset (&rsync,0 ,sizeof (rsync)); rsync.argv = args; rsync.stdout_to_stderr =1 ; args[0 ] ="rsync" ;
@@ -263,9 +262,8 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)static int fetch_objs_via_rsync (struct transport *transport,int nr_objs,struct ref **to_fetch) { -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ; -memset (&rsync,0 ,sizeof (rsync)); rsync.stdout_to_stderr =1 ;argv_array_push (&rsync.args,"rsync" );argv_array_push (&rsync.args, (transport->verbose >1 ) ?"-rv" :"-r" );
@@ -327,7 +325,7 @@ static int rsync_transport_push(struct transport *transport, {struct strbuf buf =STRBUF_INIT , temp_dir =STRBUF_INIT ;int result =0 , i; -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ;const char *args[10 ];if (flags &TRANSPORT_PUSH_MIRROR )
@@ -338,7 +336,6 @@ static int rsync_transport_push(struct transport *transport,strbuf_addstr (&buf,rsync_url (transport->url));strbuf_addch (&buf,'/' ); -memset (&rsync,0 ,sizeof (rsync)); rsync.argv = args; rsync.stdout_to_stderr =1 ; i =0 ;
@@ -1056,7 +1053,7 @@ static int run_pre_push_hook(struct transport *transport, {int ret =0 , x;struct ref *r; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;struct strbuf buf;const char *argv[4 ];
@@ -1067,7 +1064,6 @@ static int run_pre_push_hook(struct transport *transport, argv[2 ] = transport->url; argv[3 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.argv = argv; proc.in =-1 ;
upload-pack.c +1 -2
@@ -80,7 +80,7 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)static void create_pack_file (void ) { -struct child_process pack_objects; +struct child_process pack_objects =CHILD_PROCESS_INIT ;char data[8193 ], progress[128 ];char abort_msg[] ="aborting due to possible repository " "corruption on the remote side." ;
@@ -108,7 +108,6 @@ static void create_pack_file(void) argv[arg++] ="--include-tag" ; argv[arg++] =NULL ; -memset (&pack_objects,0 ,sizeof (pack_objects)); pack_objects.in =-1 ; pack_objects.out =-1 ; pack_objects.err =-1 ;
wt-status.c +1 -2
@@ -725,7 +725,7 @@ static void wt_status_print_changed(struct wt_status *s)static void wt_status_print_submodule_summary (struct wt_status *s,int uncommitted) { -struct child_process sm_summary; +struct child_process sm_summary =CHILD_PROCESS_INIT ;struct argv_array env =ARGV_ARRAY_INIT ;struct argv_array argv =ARGV_ARRAY_INIT ;struct strbuf cmd_stdout =STRBUF_INIT ;
@@ -744,7 +744,6 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommittif (!uncommitted)argv_array_push (&argv, s->amend ?"HEAD^" :"HEAD" ); -memset (&sm_summary,0 ,sizeof (sm_summary)); sm_summary.argv = argv.argv; sm_summary.env = env.argv; sm_summary.git_cmd =1 ;
Signature · 1 line
2.1.0
Quoted 5 lines · René Scharfe
Most struct
child_processvariables are cleared using memset right after declaration. Provide a macro,CHILD_PROCESS_INIT, that can be used to initialize them statically instead. That's shorter, doesn't require a function call and is slightly more readable (especially given that we already have similar macros likeSTRBUF_INIT,ARGV_ARRAY_INITetc.).
I think one reason we never had an INIT macro here is that you cannot simply use the struct after zero-ing it anyway. That's just the first step, and then you have to tweak a bunch of fields to get what you want. So the memset is just one setup line out of many.
Still, I think this is probably an improvement for the reasons you give above, and we can still memset() in any cases where it makes sense.
Patch itself looks obviously correct.
-Peff
Am 17.08.2014 um 09:12 schrieb Jeff King:
Quoted 8 lines · René Scharfe
Quoted 6 lines
Most struct
child_processvariables are cleared using memset right after declaration. Provide a macro,CHILD_PROCESS_INIT, that can be used to initialize them statically instead. That's shorter, doesn't require a function call and is slightly more readable (especially given that we already have similar macros likeSTRBUF_INIT,ARGV_ARRAY_INITetc.).
Quoted 4 lines
I think one reason we never had an INIT macro here is that you cannot simply use the struct after zero-ing it anyway. That's just the first step, and then you have to tweak a bunch of fields to get what you want. So the memset is just one setup line out of many.
Some (or most?) of these steps could be converted to named initializers -- once all supported platforms provide them..
René
Quoted 7 lines · René Scharfe
Quoted 4 lines
I think one reason we never had an INIT macro here is that you cannot simply use the struct after zero-ing it anyway. That's just the first step, and then you have to tweak a bunch of fields to get what you want. So the memset is just one setup line out of many.
Some (or most?) of these steps could be converted to named initializers -- once all supported platforms provide them..
Yeah, I'd be fine with that, but I am not holding my breath on the "once..." in your statement. :)
-Peff
Am 17.08.2014 00:55, schrieb René Scharfe:
Quoted 5 lines
Most struct
child_processvariables are cleared using memset right after declaration. Provide a macro,CHILD_PROCESS_INIT, that can be used to initialize them statically instead. That's shorter, doesn't require a function call and is slightly more readable (especially given that we already have similar macros likeSTRBUF_INIT,ARGV_ARRAY_INITetc.).
This is a step in the right direction, IMO. This way to initialize the struct feels mucth better because it does not depend on that the bit pattern of the NULL pointer is all zeros.
Quoted 30 lines
Signed-off-by Rene Scharfe <[email protected]>--- Documentation/technical/api-run-command.txt | 4 ++-- archive-tar.c | 3 +-- builtin/add.c | 3 +-- builtin/commit.c | 3 +-- builtin/help.c | 3 +-- builtin/merge.c | 3 +-- builtin/notes.c | 3 +-- builtin/remote-ext.c | 3 +-- builtin/repack.c | 3 +-- builtin/replace.c | 4 ++-- builtin/verify-pack.c | 3 +-- bundle.c | 6 ++---- connected.c | 3 +-- convert.c | 3 +-- credential-cache.c | 3 +-- credential.c | 3 +-- daemon.c | 8 +++----- diff.c | 3 +-- editor.c | 3 +-- fetch-pack.c | 3 +-- gpg-interface.c | 6 ++---- http-backend.c | 3 +-- http.c | 3 +-- imap-send.c | 2 +- prompt.c | 3 +-- remote-curl.c | 3 +-- remote-testsvn.c | 3 +-- run-command.h | 2 ++
Quoted 8 lines
send-pack.c | 3 +-- submodule.c | 21 +++++++-------------- test-run-command.c | 4 +--- test-subprocess.c | 3 +-- transport.c | 12 ++++-------- upload-pack.c | 3 +-- wt-status.c | 3 +-- 35 files changed, 51 insertions(+), 93 deletions(-)
You missed a few instances in builtin/receive-pack.c. Is this deliberate?
Another one is in transport-helper.c::fetch_with_import() that is currently initialized in get_importer(), and another one in push_refs_with_export() that is initialized in get_exporter().
Should the static struct child_process variables in pager.c and connect.c use the macro? It would just be for completeness, but does not change the correctness. I dunno.
run-command.h struct child_process { · line 47
Quoted 9 lines
run-command.h +1
-0@@ -44,6 +44,8 @@ struct child_process { unsigned clean_on_exit:1; }; +#define CHILD_PROCESS_INIT { NULL }
I would have expected this to read
#define CHILD_PROCESS_INIT { NULL, ARGV_ARRAY_INIT }
It does change the bit pattern of the initialized struct child_process because ARGV_ARRAY_INIT uses a non-NULL address. But IMHO ARGV_ARRAY_INIT should be used here as a defensive measure.
-- Hannes
Quoted 3 lines · Johannes Sixt
This is a step in the right direction, IMO. This way to initialize the struct feels mucth better because it does not depend on that the bit pattern of the NULL pointer is all zeros.
I think platforms with NULL as something besides all-bits-zero are a lost cause with git. There are so many struct memsets that depend on this (and it's probably not actually worth caring about).
Quoted 9 lines
Quoted 1 line
+#define
CHILD_PROCESS_INIT{ NULL }I would have expected this to read
#define
CHILD_PROCESS_INIT{ NULL,ARGV_ARRAY_INIT}It does change the bit pattern of the initialized struct
child_processbecauseARGV_ARRAY_INITuses a non-NULL address. But IMHOARGV_ARRAY_INITshould be used here as a defensive measure.
I'd be OK with that. The argv_array code is specifically OK with an all-bits-zero initialization. The only thing you don't get is that an empty array is non-NULL, but that should never matter here (true, we'd segfault if you didn't add anything to the array, but that is clearly a bug that needs to be fixed either way).
I'm a little worried, though, that use sites without initializers would be left behind. For example, git_proxy_connect uses xcalloc to allocate the child_process, which results in all-bits-zero. If we want to start caring about the initialization, we probably need to provide a child_process_init() function and use it consistently.
-Peff
Quoted 5 lines · Jeff King
I'm a little worried, though, that use sites without initializers would be left behind. For example,
git_proxy_connectuses xcalloc to allocate thechild_process, which results in all-bits-zero. If we want to start caring about the initialization, we probably need to provide achild_process_init()function and use it consistently.
Thanks. Perhaps I can expect a v2 from René?
PATCH v2 1/4 run-command: introduce CHILD_PROCESS_INIT
Most struct child_process variables are cleared using memset first after declaration. Provide a macro, CHILD_PROCESS_INIT, that can be used to initialize them statically instead. That's shorter, doesn't require a function call and is slightly more readable (especially given that we already have STRBUF_INIT, ARGV_ARRAY_INIT etc.).
---
Now with ARGV_ARRAY_INIT and more conversions.
Documentation/technical/api-run-command.txt | 4 ++-- archive-tar.c | 3 +-- builtin/add.c | 3 +-- builtin/commit.c | 3 +-- builtin/help.c | 3 +-- builtin/merge.c | 3 +-- builtin/notes.c | 3 +-- builtin/receive-pack.c | 12 ++++-------- builtin/remote-ext.c | 3 +-- builtin/repack.c | 3 +-- builtin/replace.c | 4 ++-- builtin/verify-pack.c | 3 +-- bundle.c | 6 ++---- column.c | 2 +- connect.c | 2 +- connected.c | 3 +-- convert.c | 3 +-- credential-cache.c | 3 +-- credential.c | 3 +-- daemon.c | 8 +++----- diff.c | 3 +-- editor.c | 3 +-- fetch-pack.c | 3 +-- gpg-interface.c | 6 ++---- http-backend.c | 3 +-- http.c | 3 +-- imap-send.c | 2 +- pager.c | 2 +- prompt.c | 3 +-- remote-curl.c | 3 +-- remote-testsvn.c | 3 +-- run-command.c | 3 +-- run-command.h | 2 ++ send-pack.c | 3 +-- submodule.c | 21 +++++++-------------- test-run-command.c | 4 +--- test-subprocess.c | 3 +-- transport.c | 12 ++++-------- upload-pack.c | 5 ++--- wt-status.c | 3 +-- 40 files changed, 60 insertions(+), 107 deletions(-)
Documentation/technical/api-run-command.txt +2 -2
@@ -96,8 +96,8 @@ command to run in a sub-process. The caller: -1. allocates and clears (memset(&chld, 0, sizeof(chld));) a - struct child_process variable; +1. allocates and clears (memset(&chld, 0, sizeof(chld)); or + using CHILD_PROCESS_INIT) a struct child_process variable; 2. initializes the members; 3. calls start_command(); 4. processes the data;
archive-tar.c +1 -2
@@ -395,7 +395,7 @@ static int write_tar_filter_archive(const struct archiver *ar, struct archiver_args *args) {struct strbuf cmd =STRBUF_INIT ; -struct child_process filter; +struct child_process filter =CHILD_PROCESS_INIT ;const char *argv[2 ];int r;
@@ -406,7 +406,6 @@ static int write_tar_filter_archive(const struct archiver *ar,if (args->compression_level >=0 )strbuf_addf (&cmd," -%d" , args->compression_level); -memset (&filter,0 ,sizeof (filter)); argv[0 ] = cmd.buf; argv[1 ] =NULL ; filter.argv = argv;
builtin/add.c +1 -2
@@ -180,7 +180,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)char *file =git_pathdup ("ADD_EDIT.patch" );const char *apply_argv[] = {"apply" ,"--recount" ,"--cached" ,NULL ,NULL }; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct rev_info rev;int out;struct stat st;
@@ -214,7 +214,6 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (!st.st_size)die (_ ("Empty patch. Aborted." )); -memset (&child,0 ,sizeof (child)); child.git_cmd =1 ; child.argv = apply_argv;if (run_command (&child))
builtin/commit.c +1 -2
@@ -1508,7 +1508,7 @@ static int run_rewrite_hook(const unsigned char *oldsha1, {/* oldsha1 SP newsha1 LF NUL */ static char buf[2 *40 +3 ]; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;const char *argv[3 ];int code;size_t n;
@@ -1520,7 +1520,6 @@ static int run_rewrite_hook(const unsigned char *oldsha1, argv[1 ] ="amend" ; argv[2 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.argv = argv; proc.in =-1 ; proc.stdout_to_stderr =1 ;
builtin/help.c +1 -2
@@ -79,12 +79,11 @@ static const char *get_man_viewer_info(const char *name)static int check_emacsclient_version (void ) {struct strbuf buffer =STRBUF_INIT ; -struct child_process ec_process; +struct child_process ec_process =CHILD_PROCESS_INIT ;const char *argv_ec[] = {"emacsclient" ,"--version" ,NULL };int version;/* emacsclient prints its version number on stderr */ -memset (&ec_process,0 ,sizeof (ec_process)); ec_process.argv = argv_ec; ec_process.err =-1 ; ec_process.stdout_to_stderr =1 ;
builtin/merge.c +1 -2
@@ -237,11 +237,10 @@ static void drop_save(void)static int save_state (unsigned char *stash) {int len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;struct strbuf buffer =STRBUF_INIT ;const char *argv[] = {"stash" ,"create" ,NULL }; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.out =-1 ; cp.git_cmd =1 ;
builtin/notes.c +1 -2
@@ -122,12 +122,11 @@ static void write_commented_object(int fd, const unsigned char *object) {const char *show_args[5 ] = {"show" ,"--stat" ,"--no-notes" ,sha1_to_hex (object),NULL }; -struct child_process show; +struct child_process show =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;struct strbuf cbuf =STRBUF_INIT ;/* Invoke "git show --stat --no-notes $object" */ -memset (&show,0 ,sizeof (show)); show.argv = show_args; show.no_stdin =1 ; show.out =-1 ;
builtin/receive-pack.c +4 -8
@@ -255,7 +255,7 @@ static int copy_to_sideband(int in, int out, void *arg)typedef int (*feed_fn )(void *,const char **,size_t *);static int run_and_feed_hook (const char *hook_name,feed_fn feed,void *feed_state) { -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;struct async muxer;const char *argv[2 ];int code;
@@ -266,7 +266,6 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed, void *feed_sta argv[1 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.argv = argv; proc.in =-1 ; proc.stdout_to_stderr =1 ;
@@ -350,7 +349,7 @@ static int run_receive_hook(struct command *commands, const char *hook_name,static int run_update_hook (struct command *cmd) {const char *argv[5 ]; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;int code; argv[0 ] =find_hook ("update" );
@@ -362,7 +361,6 @@ static int run_update_hook(struct command *cmd) argv[3 ] =sha1_to_hex (cmd->new_sha1); argv[4 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.no_stdin =1 ; proc.stdout_to_stderr =1 ; proc.err = use_sideband ?-1 :0 ;
@@ -598,7 +596,7 @@ static void run_update_post_hook(struct command *commands)struct command *cmd;int argc;const char **argv; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;char *hook; hook =find_hook ("post-update" );
@@ -621,7 +619,6 @@ static void run_update_post_hook(struct command *commands) } argv[argc] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.no_stdin =1 ; proc.stdout_to_stderr =1 ; proc.err = use_sideband ?-1 :0 ;
@@ -911,7 +908,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)const char *hdr_err;int status;char hdr_arg[38 ]; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;int fsck_objects = (receive_fsck_objects >=0 ? receive_fsck_objects : transfer_fsck_objects >= 0
@@ -933,7 +930,6 @@ static const char *unpack(int err_fd, struct shallow_info *si)argv_array_pushl (&av,"--shallow-file" , alt_shallow_file,NULL ); } -memset (&child,0 ,sizeof (child));if (ntohl (hdr.hdr_entries) < unpack_limit) {argv_array_pushl (&av,"unpack-objects" , hdr_arg,NULL );if (quiet)
builtin/remote-ext.c +1 -2
@@ -179,9 +179,8 @@ static void send_git_request(int stdin_fd, const char *serv, const char *repo,static int run_child (const char *arg,const char *service) {int r; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ; -memset (&child,0 ,sizeof (child)); child.in =-1 ; child.out =-1 ; child.err =0 ;
builtin/repack.c +1 -2
@@ -133,7 +133,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) {".idx"}, {".bitmap", 1}, }; -struct child_process cmd; +struct child_process cmd =CHILD_PROCESS_INIT ;struct string_list_item *item;struct argv_array cmd_args =ARGV_ARRAY_INIT ;struct string_list names =STRING_LIST_INIT_DUP ;
@@ -250,7 +250,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)argv_array_push (&cmd_args, packtmp); -memset (&cmd,0 ,sizeof (cmd)); cmd.argv = cmd_args.argv; cmd.git_cmd =1 ; cmd.out =-1 ;
builtin/replace.c +2 -2
@@ -197,7 +197,7 @@ static int replace_object(const char *object_ref, const char *replace_ref, int fstatic void export_object (const unsigned char *sha1,enum object_type type,int raw,const char *filename) { -struct child_process cmd = {NULL }; +struct child_process cmd =CHILD_PROCESS_INIT ;int fd; fd =open (filename,O_WRONLY |O_CREAT |O_TRUNC ,0666 );
@@ -234,7 +234,7 @@ static void import_object(unsigned char *sha1, enum object_type type,if (!raw && type ==OBJ_TREE ) {const char *argv[] = {"mktree" ,NULL }; -struct child_process cmd = { argv }; +struct child_process cmd =CHILD_PROCESS_INIT ;struct strbuf result =STRBUF_INIT ; cmd.argv = argv;
builtin/verify-pack.c +1 -2
@@ -8,7 +8,7 @@static int verify_one_pack (const char *path,unsigned int flags) { -struct child_process index_pack; +struct child_process index_pack =CHILD_PROCESS_INIT ;const char *argv[] = {"index-pack" ,NULL ,NULL ,NULL };struct strbuf arg =STRBUF_INIT ;int verbose = flags &VERIFY_PACK_VERBOSE ;
@@ -32,7 +32,6 @@ static int verify_one_pack(const char *path, unsigned int flags)strbuf_addstr (&arg,".pack" ); argv[2 ] = arg.buf; -memset (&index_pack,0 ,sizeof (index_pack)); index_pack.argv = argv; index_pack.git_cmd =1 ;
bundle.c +2 -4
@@ -240,7 +240,7 @@ int create_bundle(struct bundle_header *header, const char *path,int i, ref_count =0 ;struct strbuf buf =STRBUF_INIT ;struct rev_info revs; -struct child_process rls; +struct child_process rls =CHILD_PROCESS_INIT ;FILE *rls_fout; bundle_to_stdout = !strcmp (path,"-" );
@@ -258,7 +258,6 @@ int create_bundle(struct bundle_header *header, const char *path,init_revisions (&revs,NULL );/* write prerequisites */ -memset (&rls,0 ,sizeof (rls));argv_array_pushl (&rls.args,"rev-list" ,"--boundary" ,"--pretty=oneline" ,NULL );
@@ -417,14 +416,13 @@ int unbundle(struct bundle_header *header, int bundle_fd, int flags) {const char *argv_index_pack[] = {"index-pack" ,"--fix-thin" ,"--stdin" ,NULL ,NULL }; -struct child_process ip; +struct child_process ip =CHILD_PROCESS_INIT ;if (flags &BUNDLE_VERBOSE ) argv_index_pack[3 ] ="-v" ;if (verify_bundle (header,0 ))return -1 ; -memset (&ip,0 ,sizeof (ip)); ip.argv = argv_index_pack; ip.in = bundle_fd; ip.no_stdout =1 ;
column.c +1 -1
@@ -367,7 +367,7 @@ int parseopt_column_callback(const struct option *opt, }static int fd_out =-1 ; -static struct child_process column_process; +static struct child_process column_process =CHILD_PROCESS_INIT ;int run_column_filter (int colopts,const struct column_options *opts) {
connect.c +1 -1
@@ -639,7 +639,7 @@ static enum protocol parse_connect_url(const char *url_orig, char **ret_host,return protocol; } -static struct child_process no_fork; +static struct child_process no_fork =CHILD_PROCESS_INIT ;/* * This returns a dummy child_process if the transport protocol does not
connected.c +1 -2
@@ -25,7 +25,7 @@ static int check_everything_connected_real(sha1_iterate_fn fn,struct transport *transport, const char *shallow_file) { - struct child_process rev_list; + struct child_process rev_list = CHILD_PROCESS_INIT;const char *argv[9 ];char commit[41 ];unsigned char sha1[20 ];
@@ -60,7 +60,6 @@ static int check_everything_connected_real(sha1_iterate_fn fn, argv[ac++] ="--quiet" ; argv[ac] =NULL ; -memset (&rev_list,0 ,sizeof (rev_list)); rev_list.argv = argv; rev_list.git_cmd =1 ; rev_list.in =-1 ;
convert.c +1 -2
@@ -321,7 +321,7 @@ static int filter_buffer(int in, int out, void *data)/* * Spawn cmd and feed the buffer contents through its stdin. */ -struct child_process child_process; +struct child_process child_process =CHILD_PROCESS_INIT ;struct filter_params *params = (struct filter_params *)data;int write_err, status;const char *argv[] = {NULL ,NULL };
@@ -344,7 +344,6 @@ static int filter_buffer(int in, int out, void *data) argv[0 ] = cmd.buf; -memset (&child_process,0 ,sizeof (child_process)); child_process.argv = argv; child_process.use_shell =1 ; child_process.in =-1 ;
credential-cache.c +1 -2
@@ -37,12 +37,11 @@ static int send_request(const char *socket, const struct strbuf *out)static void spawn_daemon (const char *socket) { -struct child_process daemon; +struct child_process daemon =CHILD_PROCESS_INIT ;const char *argv[] = {NULL ,NULL ,NULL };char buf[128 ];int r; -memset (&daemon,0 ,sizeof (daemon)); argv[0 ] ="git-credential-cache--daemon" ; argv[1 ] = socket; daemon.argv = argv;
credential.c +1 -2
@@ -205,11 +205,10 @@ static int run_credential_helper(struct credential *c, const char *cmd, int want_output) { -struct child_process helper; +struct child_process helper =CHILD_PROCESS_INIT ;const char *argv[] = {NULL ,NULL };FILE *fp; -memset (&helper,0 ,sizeof (helper)); argv[0 ] = cmd; helper.argv = argv; helper.use_shell =1 ;
daemon.c +3 -5
@@ -259,7 +259,7 @@ static const char *access_hook;static int run_access_hook (struct daemon_service *service,const char *dir,const char *path) { -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;const char *argv[8 ];const char **arg = argv;
@@ -277,7 +277,6 @@ static int run_access_hook(struct daemon_service *service, const char *dir, cons *arg =NULL ;#undef STRARG -memset (&child,0 ,sizeof (child)); child.use_shell =1 ; child.argv = argv; child.no_stdin =1 ;
@@ -406,9 +405,8 @@ static void copy_to_log(int fd)static int run_service_command (const char **argv) { -struct child_process cld; +struct child_process cld =CHILD_PROCESS_INIT ; -memset (&cld,0 ,sizeof (cld)); cld.argv = argv; cld.git_cmd =1 ; cld.err =-1 ;
@@ -733,7 +731,7 @@ static void check_dead_children(void)static char **cld_argv;static void handle (int incoming,struct sockaddr *addr,socklen_t addrlen) { -struct child_process cld = {NULL }; +struct child_process cld =CHILD_PROCESS_INIT ;char addrbuf[300 ] ="REMOTE_ADDR=" , portbuf[300 ];char *env[] = { addrbuf, portbuf,NULL };
diff.c +1 -2
@@ -4931,7 +4931,7 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,struct diff_tempfile *temp;const char *argv[3 ];const char **arg = argv; -struct child_process child; +struct child_process child =CHILD_PROCESS_INIT ;struct strbuf buf =STRBUF_INIT ;int err =0 ;
@@ -4940,7 +4940,6 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec, *arg++ = temp->name; *arg =NULL ; -memset (&child,0 ,sizeof (child)); child.use_shell =1 ; child.argv = argv; child.out =-1 ;
editor.c +1 -2
@@ -38,10 +38,9 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *enif (strcmp (editor,":" )) {const char *args[] = { editor,real_path (path),NULL }; -struct child_process p; +struct child_process p =CHILD_PROCESS_INIT ;int ret, sig; -memset (&p,0 ,sizeof (p)); p.argv = args; p.env = env; p.use_shell =1 ;
fetch-pack.c +1 -2
@@ -666,7 +666,7 @@ static int get_pack(struct fetch_pack_args *args,char hdr_arg[256 ];const char **av, *cmd_name;int do_keep = args->keep_pack; -struct child_process cmd; +struct child_process cmd =CHILD_PROCESS_INIT ;int ret;memset (&demux,0 ,sizeof (demux));
@@ -685,7 +685,6 @@ static int get_pack(struct fetch_pack_args *args,else demux.out = xd[0 ]; -memset (&cmd,0 ,sizeof (cmd)); cmd.argv = argv; av = argv; *hdr_arg =0 ;
gpg-interface.c +2 -4
@@ -55,12 +55,11 @@ const char *get_signing_key(void)*/ int sign_buffer (struct strbuf *buffer,struct strbuf *signature,const char *signing_key) { -struct child_process gpg; +struct child_process gpg =CHILD_PROCESS_INIT ;const char *args[4 ];ssize_t len;size_t i, j, bottom; -memset (&gpg,0 ,sizeof (gpg)); gpg.argv = args; gpg.in =-1 ; gpg.out =-1 ;
@@ -116,7 +115,7 @@ int verify_signed_buffer(const char *payload, size_t payload_size, const char *signature, size_t signature_size, struct strbuf *gpg_output, struct strbuf *gpg_status) { - struct child_process gpg; + struct child_process gpg = CHILD_PROCESS_INIT;const char *args_gpg[] = {NULL ,"--status-fd=1" ,"--verify" ,"FILE" ,"-" ,NULL };char path[PATH_MAX ];int fd, ret;
@@ -133,7 +132,6 @@ int verify_signed_buffer(const char *payload, size_t payload_size, path, strerror(errno));close (fd); -memset (&gpg,0 ,sizeof (gpg)); gpg.argv = args_gpg; gpg.in =-1 ; gpg.out =-1 ;
http-backend.c +1 -2
@@ -323,7 +323,7 @@ static void run_service(const char **argv)const char *host =getenv ("REMOTE_ADDR" );struct argv_array env =ARGV_ARRAY_INIT ;int gzipped_request =0 ; -struct child_process cld; +struct child_process cld =CHILD_PROCESS_INIT ;if (encoding && !strcmp (encoding,"gzip" )) gzipped_request =1 ;
@@ -341,7 +341,6 @@ static void run_service(const char **argv)argv_array_pushf (&env,"GIT_COMMITTER_EMAIL=%s@http.%s" , user, host); -memset (&cld,0 ,sizeof (cld)); cld.argv = argv; cld.env = env.argv;if (gzipped_request)
http.c +1 -2
@@ -1332,7 +1332,7 @@ int finish_http_pack_request(struct http_pack_request *preq)struct packed_git **lst;struct packed_git *p = preq->target;char *tmp_idx; -struct child_process ip; +struct child_process ip =CHILD_PROCESS_INIT ;const char *ip_argv[8 ];close_pack_index (p);
@@ -1355,7 +1355,6 @@ int finish_http_pack_request(struct http_pack_request *preq) ip_argv[3 ] = preq->tmpfile; ip_argv[4 ] =NULL ; -memset (&ip,0 ,sizeof (ip)); ip.argv = ip_argv; ip.git_cmd =1 ; ip.no_stdin =1 ;
imap-send.c +1 -1
@@ -962,7 +962,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc)if (srvc->tunnel) {const char *argv[] = { srvc->tunnel,NULL }; -struct child_process tunnel = {NULL }; +struct child_process tunnel =CHILD_PROCESS_INIT ;imap_info ("Starting tunnel '%s'... " , srvc->tunnel);
pager.c +1 -1
@@ -18,7 +18,7 @@ struct pager_config {*/ static const char *pager_argv[] = {NULL ,NULL }; -static struct child_process pager_process; +static struct child_process pager_process =CHILD_PROCESS_INIT ;static void wait_for_pager (void ) {
prompt.c +1 -2
@@ -6,7 +6,7 @@static char *do_askpass (const char *cmd,const char *prompt) { -struct child_process pass; +struct child_process pass =CHILD_PROCESS_INIT ;const char *args[3 ];static struct strbuf buffer =STRBUF_INIT ;int err =0 ;
@@ -15,7 +15,6 @@ static char *do_askpass(const char *cmd, const char *prompt) args[1 ] = prompt; args[2 ] =NULL ; -memset (&pass,0 ,sizeof (pass)); pass.argv = args; pass.out =-1 ;
remote-curl.c +1 -2
@@ -623,10 +623,9 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads)const char *svc = rpc->service_name;struct strbuf buf =STRBUF_INIT ;struct strbuf *preamble = rpc->stdin_preamble; -struct child_process client; +struct child_process client =CHILD_PROCESS_INIT ;int err =0 ; -memset (&client,0 ,sizeof (client)); client.in =-1 ; client.out =-1 ; client.git_cmd =1 ;
remote-testsvn.c +1 -2
@@ -175,7 +175,7 @@ static int cmd_import(const char *line)char *note_msg;unsigned char head_sha1[20 ];unsigned int startrev; -struct child_process svndump_proc; +struct child_process svndump_proc =CHILD_PROCESS_INIT ;const char *command ="svnrdump" ;if (read_ref (private_ref, head_sha1))
@@ -200,7 +200,6 @@ static int cmd_import(const char *line)if (dumpin_fd <0 )die_errno ("Couldn't open svn dump file %s." , url); }else { -memset (&svndump_proc,0 ,sizeof (struct child_process )); svndump_proc.out =-1 ;argv_array_push (&svndump_proc.args, command);argv_array_push (&svndump_proc.args,"dump" );
run-command.c +1 -2
@@ -763,14 +763,13 @@ char *find_hook(const char *name)int run_hook_ve (const char *const *env,const char *name,va_list args) { -struct child_process hook; +struct child_process hook =CHILD_PROCESS_INIT ;const char *p; p =find_hook (name);if (!p)return 0 ; -memset (&hook,0 ,sizeof (hook));argv_array_push (&hook.args, p); while ((p = va_arg(args, const char *)))argv_array_push (&hook.args, p);
run-command.h +2 -0
@@ -44,6 +44,8 @@ struct child_process { unsigned clean_on_exit:1; }; +#define CHILD_PROCESS_INIT { NULL, ARGV_ARRAY_INIT } +int start_command (struct child_process *);int finish_command (struct child_process *);int run_command (struct child_process *);
send-pack.c +1 -2
@@ -47,7 +47,7 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, struNULL , NULL, }; -struct child_process po; +struct child_process po =CHILD_PROCESS_INIT ;int i; i =4 ;
@@ -59,7 +59,6 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru argv[i++] ="-q" ;if (args->progress) argv[i++] ="--progress" ; -memset (&po,0 ,sizeof (po)); po.argv = argv; po.in =-1 ; po.out = args->stateless_rpc ?-1 : fd;
submodule.c +7 -14
@@ -433,13 +433,12 @@ static int submodule_needs_pushing(const char *path, const unsigned char sha1[20return 0 ;if (for_each_remote_ref_submodule (path, has_remote,NULL ) >0 ) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"rev-list" ,NULL ,"--not" ,"--remotes" ,"-n" ,"1" ,NULL };struct strbuf buf =STRBUF_INIT ;int needs_pushing =0 ; argv[1 ] =sha1_to_hex (sha1); -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -524,10 +523,9 @@ static int push_submodule(const char *path)return 1 ;if (for_each_remote_ref_submodule (path, has_remote,NULL ) >0 ) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"push" ,NULL }; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -569,12 +567,11 @@ static int is_submodule_commit_present(const char *path, unsigned char sha1[20])if (!add_submodule_odb (path) &&lookup_commit_reference (sha1)) {/* Even if the submodule is checked out and the commit is * present, make sure it is reachable from a ref. */ -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"rev-list" ,"-n" ,"1" ,NULL ,"--not" ,"--all" ,NULL };struct strbuf buf =STRBUF_INIT ; argv[3 ] =sha1_to_hex (sha1); -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -695,7 +692,7 @@ int fetch_populated_submodules(const struct argv_array *options, int quiet) {int i, result =0 ; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;struct argv_array argv =ARGV_ARRAY_INIT ;struct string_list_item *name_for_path;const char *work_tree =get_git_work_tree ();
@@ -711,7 +708,6 @@ int fetch_populated_submodules(const struct argv_array *options,argv_array_push (&argv,"--recurse-submodules-default" );/* default value, "--submodule-prefix" and its value are added later */ -memset (&cp,0 ,sizeof (cp)); cp.env = local_repo_env; cp.git_cmd =1 ; cp.no_stdin =1 ;
@@ -794,7 +790,7 @@ out:unsigned is_submodule_modified (const char *path,int ignore_untracked) {ssize_t len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"status" ,"--porcelain" ,
@@ -821,7 +817,6 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)if (ignore_untracked) argv[2 ] ="-uno" ; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -862,7 +857,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)int submodule_uses_gitfile (const char *path) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"submodule" ,"foreach" ,
@@ -883,7 +878,6 @@ int submodule_uses_gitfile(const char *path)strbuf_release (&buf);/* Now test that all nested submodules use a gitfile too */ -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
@@ -901,7 +895,7 @@ int ok_to_remove_submodule(const char *path) {struct stat st;ssize_t len; -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;const char *argv[] = {"status" ,"--porcelain" ,
@@ -918,7 +912,6 @@ int ok_to_remove_submodule(const char *path)if (!submodule_uses_gitfile (path))return 0 ; -memset (&cp,0 ,sizeof (cp)); cp.argv = argv; cp.env = local_repo_env; cp.git_cmd =1 ;
test-run-command.c +1 -3
@@ -15,9 +15,7 @@int main (int argc,char **argv) { -struct child_process proc; - -memset (&proc,0 ,sizeof (proc)); +struct child_process proc =CHILD_PROCESS_INIT ;if (argc <3 )return 1 ;
test-subprocess.c +1 -2
@@ -3,7 +3,7 @@int main (int argc,char **argv) { -struct child_process cp; +struct child_process cp =CHILD_PROCESS_INIT ;int nogit =0 ;setup_git_directory_gently (&nogit);
@@ -13,7 +13,6 @@ int main(int argc, char **argv)setup_work_tree (); argv++; } -memset (&cp,0 ,sizeof (cp)); cp.git_cmd =1 ; cp.argv = (const char **)argv +1 ;return run_command (&cp);
transport.c +4 -8
@@ -201,7 +201,7 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push) {struct strbuf buf =STRBUF_INIT , temp_dir =STRBUF_INIT ;struct ref dummy = {NULL }, *tail = &dummy; -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ;const char *args[5 ];int temp_dir_len;
@@ -218,7 +218,6 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)strbuf_addstr (&buf,rsync_url (transport->url));strbuf_addstr (&buf,"/refs" ); -memset (&rsync,0 ,sizeof (rsync)); rsync.argv = args; rsync.stdout_to_stderr =1 ; args[0 ] ="rsync" ;
@@ -263,9 +262,8 @@ static struct ref *get_refs_via_rsync(struct transport *transport, int for_push)static int fetch_objs_via_rsync (struct transport *transport,int nr_objs,struct ref **to_fetch) { -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ; -memset (&rsync,0 ,sizeof (rsync)); rsync.stdout_to_stderr =1 ;argv_array_push (&rsync.args,"rsync" );argv_array_push (&rsync.args, (transport->verbose >1 ) ?"-rv" :"-r" );
@@ -327,7 +325,7 @@ static int rsync_transport_push(struct transport *transport, {struct strbuf buf =STRBUF_INIT , temp_dir =STRBUF_INIT ;int result =0 , i; -struct child_process rsync; +struct child_process rsync =CHILD_PROCESS_INIT ;const char *args[10 ];if (flags &TRANSPORT_PUSH_MIRROR )
@@ -338,7 +336,6 @@ static int rsync_transport_push(struct transport *transport,strbuf_addstr (&buf,rsync_url (transport->url));strbuf_addch (&buf,'/' ); -memset (&rsync,0 ,sizeof (rsync)); rsync.argv = args; rsync.stdout_to_stderr =1 ; i =0 ;
@@ -1056,7 +1053,7 @@ static int run_pre_push_hook(struct transport *transport, {int ret =0 , x;struct ref *r; -struct child_process proc; +struct child_process proc =CHILD_PROCESS_INIT ;struct strbuf buf;const char *argv[4 ];
@@ -1067,7 +1064,6 @@ static int run_pre_push_hook(struct transport *transport, argv[2 ] = transport->url; argv[3 ] =NULL ; -memset (&proc,0 ,sizeof (proc)); proc.argv = argv; proc.in =-1 ;
upload-pack.c +2 -3
@@ -80,7 +80,7 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)static void create_pack_file (void ) { -struct child_process pack_objects; +struct child_process pack_objects =CHILD_PROCESS_INIT ;char data[8193 ], progress[128 ];char abort_msg[] ="aborting due to possible repository " "corruption on the remote side." ;
@@ -108,7 +108,6 @@ static void create_pack_file(void) argv[arg++] ="--include-tag" ; argv[arg++] =NULL ; -memset (&pack_objects,0 ,sizeof (pack_objects)); pack_objects.in =-1 ; pack_objects.out =-1 ; pack_objects.err =-1 ;
@@ -448,7 +447,7 @@ static void check_non_tip(void)static const char *argv[] = {"rev-list" ,"--stdin" ,NULL , }; -static struct child_process cmd; +static struct child_process cmd =CHILD_PROCESS_INIT ;struct object *o;char namebuf[42 ];/* ^ + SHA-1 + LF */ int i;
wt-status.c +1 -2
@@ -725,7 +725,7 @@ static void wt_status_print_changed(struct wt_status *s)static void wt_status_print_submodule_summary (struct wt_status *s,int uncommitted) { -struct child_process sm_summary; +struct child_process sm_summary =CHILD_PROCESS_INIT ;struct argv_array env =ARGV_ARRAY_INIT ;struct argv_array argv =ARGV_ARRAY_INIT ;struct strbuf cmd_stdout =STRBUF_INIT ;
@@ -744,7 +744,6 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommittif (!uncommitted)argv_array_push (&argv, s->amend ?"HEAD^" :"HEAD" ); -memset (&sm_summary,0 ,sizeof (sm_summary)); sm_summary.argv = argv.argv; sm_summary.env = env.argv; sm_summary.git_cmd =1 ;
Signature · 1 line
2.1.0
PATCH v2 2/4 run-command: introduce child_process_init()
In reply to Junio C HamanoAdd a helper function for initializing those struct child_process variables for which the macro CHILD_PROCESS_INIT can't be used.
--- Documentation/technical/api-run-command.txt | 8 ++++++-- connect.c | 6 ++++-- run-command.c | 6 ++++++ run-command.h | 1 + transport-helper.c | 5 +++-- 5 files changed, 20 insertions(+), 6 deletions(-)
Documentation/technical/api-run-command.txt +6 -2
@@ -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`
@@ -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;
connect.c +4 -2
@@ -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);
@@ -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,' ' );
run-command.c +6 -0
@@ -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;
run-command.h +1 -0
@@ -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 *);
transport-helper.c +3 -2
@@ -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 ;
@@ -395,7 +396,7 @@ static int get_importer(struct transport *transport, struct child_process *fastistruct 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" );
Signature · 1 line
2.1.0
PATCH v2 3/4 run-command: call run_command_v_opt_cd_env() instead of duplicating it
In reply to Junio C Hamano--- run-command.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
run-command.c +1 -3
@@ -577,9 +577,7 @@ static void prepare_run_command_v_opt(struct child_process *cmd,int run_command_v_opt (const char **argv,int opt) { -struct child_process cmd; -prepare_run_command_v_opt (&cmd, argv, opt); -return run_command (&cmd); +return run_command_v_opt_cd_env (argv, opt,NULL ,NULL ); }int run_command_v_opt_cd_env (const char **argv,int opt,const char *dir,const char *const *env)
Signature · 1 line
2.1.0
PATCH v2 4/4 run-command: inline prepare_run_command_v_opt()
In reply to Junio C HamanoMerge prepare_run_command_v_opt() and its only caller. This removes a pointer indirection and allows to initialize the struct child_process using CHILD_PROCESS_INIT.
--- run-command.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-)
run-command.c +8 -16
@@ -561,20 +561,6 @@ int run_command(struct child_process *cmd)return finish_command (cmd); } -static void prepare_run_command_v_opt (struct child_process *cmd, -const char **argv, -int opt) -{ -memset (cmd,0 ,sizeof (*cmd)); - cmd->argv = argv; - cmd->no_stdin = opt &RUN_COMMAND_NO_STDIN ?1 :0 ; - cmd->git_cmd = opt &RUN_GIT_CMD ?1 :0 ; - cmd->stdout_to_stderr = opt &RUN_COMMAND_STDOUT_TO_STDERR ?1 :0 ; - cmd->silent_exec_failure = opt &RUN_SILENT_EXEC_FAILURE ?1 :0 ; - cmd->use_shell = opt &RUN_USING_SHELL ?1 :0 ; - cmd->clean_on_exit = opt &RUN_CLEAN_ON_EXIT ?1 :0 ; -} -int run_command_v_opt (const char **argv,int opt) {return run_command_v_opt_cd_env (argv, opt,NULL ,NULL );
@@ -582,8 +568,14 @@ int run_command_v_opt(const char **argv, int opt)int run_command_v_opt_cd_env (const char **argv,int opt,const char *dir,const char *const *env) { -struct child_process cmd; -prepare_run_command_v_opt (&cmd, argv, opt); +struct child_process cmd =CHILD_PROCESS_INIT ; + cmd.argv = argv; + cmd.no_stdin = opt &RUN_COMMAND_NO_STDIN ?1 :0 ; + cmd.git_cmd = opt &RUN_GIT_CMD ?1 :0 ; + cmd.stdout_to_stderr = opt &RUN_COMMAND_STDOUT_TO_STDERR ?1 :0 ; + cmd.silent_exec_failure = opt &RUN_SILENT_EXEC_FAILURE ?1 :0 ; + cmd.use_shell = opt &RUN_USING_SHELL ?1 :0 ; + cmd.clean_on_exit = opt &RUN_CLEAN_ON_EXIT ?1 :0 ; cmd.dir = dir; cmd.env = env;return run_command (&cmd);
Signature · 1 line
2.1.0