aboutsummaryrefslogtreecommitdiff
path: root/src/tools/perf/util/run-command.h
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-02-18 18:53:26 -0800
committerElliott Hughes <enh@google.com>2015-02-18 18:53:26 -0800
commitc8ec03e66ee9fe1aefea9555b98aa5f5f7935d5c (patch)
treec74cd86bf0d537c9408f7d60ce6567239ca7ad8d /src/tools/perf/util/run-command.h
parent9905f7e1a0a1530dfeaa239ffd2eb9e6cfff6ff5 (diff)
downloadlinux-tools-perf-c8ec03e66ee9fe1aefea9555b98aa5f5f7935d5c.tar.gz
Lose the version number from the directory name.
This way, next time we sync with upstream we'll have an actual diff to look at. Change-Id: I6474968f55ba42696c2ee894586d34f84f9f6630
Diffstat (limited to 'src/tools/perf/util/run-command.h')
-rw-r--r--src/tools/perf/util/run-command.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/tools/perf/util/run-command.h b/src/tools/perf/util/run-command.h
new file mode 100644
index 0000000..1ef264d
--- /dev/null
+++ b/src/tools/perf/util/run-command.h
@@ -0,0 +1,58 @@
+#ifndef __PERF_RUN_COMMAND_H
+#define __PERF_RUN_COMMAND_H
+
+enum {
+ ERR_RUN_COMMAND_FORK = 10000,
+ ERR_RUN_COMMAND_EXEC,
+ ERR_RUN_COMMAND_PIPE,
+ ERR_RUN_COMMAND_WAITPID,
+ ERR_RUN_COMMAND_WAITPID_WRONG_PID,
+ ERR_RUN_COMMAND_WAITPID_SIGNAL,
+ ERR_RUN_COMMAND_WAITPID_NOEXIT,
+};
+#define IS_RUN_COMMAND_ERR(x) (-(x) >= ERR_RUN_COMMAND_FORK)
+
+struct child_process {
+ const char **argv;
+ pid_t pid;
+ /*
+ * Using .in, .out, .err:
+ * - Specify 0 for no redirections (child inherits stdin, stdout,
+ * stderr from parent).
+ * - Specify -1 to have a pipe allocated as follows:
+ * .in: returns the writable pipe end; parent writes to it,
+ * the readable pipe end becomes child's stdin
+ * .out, .err: returns the readable pipe end; parent reads from
+ * it, the writable pipe end becomes child's stdout/stderr
+ * The caller of start_command() must close the returned FDs
+ * after it has completed reading from/writing to it!
+ * - Specify > 0 to set a channel to a particular FD as follows:
+ * .in: a readable FD, becomes child's stdin
+ * .out: a writable FD, becomes child's stdout/stderr
+ * .err > 0 not supported
+ * The specified FD is closed by start_command(), even in case
+ * of errors!
+ */
+ int in;
+ int out;
+ int err;
+ const char *dir;
+ const char *const *env;
+ unsigned no_stdin:1;
+ unsigned no_stdout:1;
+ unsigned no_stderr:1;
+ unsigned perf_cmd:1; /* if this is to be perf sub-command */
+ unsigned stdout_to_stderr:1;
+ void (*preexec_cb)(void);
+};
+
+int start_command(struct child_process *);
+int finish_command(struct child_process *);
+int run_command(struct child_process *);
+
+#define RUN_COMMAND_NO_STDIN 1
+#define RUN_PERF_CMD 2 /*If this is to be perf sub-command */
+#define RUN_COMMAND_STDOUT_TO_STDERR 4
+int run_command_v_opt(const char **argv, int opt);
+
+#endif /* __PERF_RUN_COMMAND_H */