brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · b2d39de Raw
67 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __SUBCMD_RUN_COMMAND_H3#define __SUBCMD_RUN_COMMAND_H4 5#include <unistd.h>6 7enum {8	ERR_RUN_COMMAND_FORK = 10000,9	ERR_RUN_COMMAND_EXEC,10	ERR_RUN_COMMAND_PIPE,11	ERR_RUN_COMMAND_WAITPID,12	ERR_RUN_COMMAND_WAITPID_WRONG_PID,13	ERR_RUN_COMMAND_WAITPID_SIGNAL,14	ERR_RUN_COMMAND_WAITPID_NOEXIT,15};16#define IS_RUN_COMMAND_ERR(x) (-(x) >= ERR_RUN_COMMAND_FORK)17 18struct child_process {19	const char **argv;20	pid_t pid;21	/*22	 * Using .in, .out, .err:23	 * - Specify 0 for no redirections (child inherits stdin, stdout,24	 *   stderr from parent).25	 * - Specify -1 to have a pipe allocated as follows:26	 *     .in: returns the writable pipe end; parent writes to it,27	 *          the readable pipe end becomes child's stdin28	 *     .out, .err: returns the readable pipe end; parent reads from29	 *          it, the writable pipe end becomes child's stdout/stderr30	 *   The caller of start_command() must close the returned FDs31	 *   after it has completed reading from/writing to it!32	 * - Specify > 0 to set a channel to a particular FD as follows:33	 *     .in: a readable FD, becomes child's stdin34	 *     .out: a writable FD, becomes child's stdout/stderr35	 *     .err > 0 not supported36	 *   The specified FD is closed by start_command(), even in case37	 *   of errors!38	 */39	int in;40	int out;41	int err;42	const char *dir;43	const char *const *env;44	int finish_result;45	unsigned no_stdin:1;46	unsigned no_stdout:1;47	unsigned no_stderr:1;48	unsigned exec_cmd:1; /* if this is to be external sub-command */49	unsigned stdout_to_stderr:1;50	unsigned finished:1;51	void (*preexec_cb)(void);52	 /* If set, call function in child rather than doing an exec. */53	int (*no_exec_cmd)(struct child_process *process);54};55 56int start_command(struct child_process *);57int check_if_command_finished(struct child_process *);58int finish_command(struct child_process *);59int run_command(struct child_process *);60 61#define RUN_COMMAND_NO_STDIN 162#define RUN_EXEC_CMD	     2	/*If this is to be external sub-command */63#define RUN_COMMAND_STDOUT_TO_STDERR 464int run_command_v_opt(const char **argv, int opt);65 66#endif /* __SUBCMD_RUN_COMMAND_H */67