cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

run-command.h (1934B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __SUBCMD_RUN_COMMAND_H
      3#define __SUBCMD_RUN_COMMAND_H
      4
      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 stdin
     28	 *     .out, .err: returns the readable pipe end; parent reads from
     29	 *          it, the writable pipe end becomes child's stdout/stderr
     30	 *   The caller of start_command() must close the returned FDs
     31	 *   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 stdin
     34	 *     .out: a writable FD, becomes child's stdout/stderr
     35	 *     .err > 0 not supported
     36	 *   The specified FD is closed by start_command(), even in case
     37	 *   of errors!
     38	 */
     39	int in;
     40	int out;
     41	int err;
     42	const char *dir;
     43	const char *const *env;
     44	unsigned no_stdin:1;
     45	unsigned no_stdout:1;
     46	unsigned no_stderr:1;
     47	unsigned exec_cmd:1; /* if this is to be external sub-command */
     48	unsigned stdout_to_stderr:1;
     49	void (*preexec_cb)(void);
     50};
     51
     52int start_command(struct child_process *);
     53int finish_command(struct child_process *);
     54int run_command(struct child_process *);
     55
     56#define RUN_COMMAND_NO_STDIN 1
     57#define RUN_EXEC_CMD	     2	/*If this is to be external sub-command */
     58#define RUN_COMMAND_STDOUT_TO_STDERR 4
     59int run_command_v_opt(const char **argv, int opt);
     60
     61#endif /* __SUBCMD_RUN_COMMAND_H */