blob: 7958eb1e0b7a927019460e06d7a01622eddf81df [file] [log] [blame]
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +02001#ifndef RUN_COMMAND_H
2#define RUN_COMMAND_H
3
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +02004enum {
5 ERR_RUN_COMMAND_FORK = 10000,
6 ERR_RUN_COMMAND_EXEC,
Shawn O. Pearce4919bf02007-03-10 03:28:08 -05007 ERR_RUN_COMMAND_PIPE,
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +02008 ERR_RUN_COMMAND_WAITPID,
9 ERR_RUN_COMMAND_WAITPID_WRONG_PID,
10 ERR_RUN_COMMAND_WAITPID_SIGNAL,
11 ERR_RUN_COMMAND_WAITPID_NOEXIT,
12};
13
Shawn O. Pearcef1000892007-03-10 03:28:00 -050014struct child_process {
15 const char **argv;
Shawn O. Pearceebcb5d12007-03-10 03:28:05 -050016 pid_t pid;
Shawn O. Pearce4919bf02007-03-10 03:28:08 -050017 int in;
Shawn O. Pearcef4bba252007-03-12 14:37:45 -040018 int out;
Alex Riesen1568fea2007-05-22 23:48:23 +020019 const char *dir;
Alex Riesenee493142007-05-22 23:48:47 +020020 const char *const *env;
Shawn O. Pearce4919bf02007-03-10 03:28:08 -050021 unsigned close_in:1;
Shawn O. Pearcef4bba252007-03-12 14:37:45 -040022 unsigned close_out:1;
Shawn O. Pearcef1000892007-03-10 03:28:00 -050023 unsigned no_stdin:1;
Shawn O. Pearcee4507ae2007-03-12 14:37:55 -040024 unsigned no_stdout:1;
Shawn O. Pearcef1000892007-03-10 03:28:00 -050025 unsigned git_cmd:1; /* if this is to be git sub-command */
26 unsigned stdout_to_stderr:1;
27};
28
Shawn O. Pearceebcb5d12007-03-10 03:28:05 -050029int start_command(struct child_process *);
30int finish_command(struct child_process *);
Shawn O. Pearcef1000892007-03-10 03:28:00 -050031int run_command(struct child_process *);
32
Shawn O. Pearce95d3c4f2006-12-30 21:55:22 -050033#define RUN_COMMAND_NO_STDIN 1
Michal Ostrowski77cb17e2006-01-10 21:12:17 -050034#define RUN_GIT_CMD 2 /*If this is to be git sub-command */
Shawn O. Pearcecd83c742006-12-30 21:55:19 -050035#define RUN_COMMAND_STDOUT_TO_STDERR 4
Shawn O. Pearce9b0b5092006-12-30 21:55:15 -050036int run_command_v_opt(const char **argv, int opt);
Alex Riesen1568fea2007-05-22 23:48:23 +020037int run_command_v_opt_cd(const char **argv, int opt, const char *dir);
Alex Riesen3427b372007-05-23 22:21:39 +020038
39/*
40 * env (the environment) is to be formatted like environ: "VAR=VALUE".
41 * To unset an environment variable use just "VAR".
42 */
Alex Riesenee493142007-05-22 23:48:47 +020043int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env);
Josef Weidendorferb1bf95b2005-07-31 21:17:43 +020044
45#endif