| Index: chromeos/process.h
|
| diff --git a/chromeos/process.h b/chromeos/process.h
|
| index 9c45bfa15cae35e4732181cbb50fda90d4e78882..1ca25bea34e5050ca724ce0b12d6e01e4be26947 100644
|
| --- a/chromeos/process.h
|
| +++ b/chromeos/process.h
|
| @@ -51,6 +51,12 @@ class Process {
|
| // from child process's perspective iff |is_input|.
|
| virtual void RedirectUsingPipe(int child_fd, bool is_input) = 0;
|
|
|
| + // Set the real/effective/saved user ID of the child process.
|
| + virtual void SetUid(uid_t uid) = 0;
|
| +
|
| + // Set the real/effective/saved group ID of the child process.
|
| + virtual void SetGid(gid_t gid) = 0;
|
| +
|
| // Gets the pipe file descriptor mapped to the process's |child_fd|.
|
| virtual int GetPipe(int child_fd) = 0;
|
|
|
| @@ -58,7 +64,9 @@ class Process {
|
| virtual bool Start() = 0;
|
|
|
| // Waits for this process to finish. Returns the process's exit
|
| - // status if it exited normally, or otherwise returns -1.
|
| + // status if it exited normally, or otherwise returns -1. Note
|
| + // that kErrorExitStatus may be returned if an error occurred
|
| + // after forking and before execing the child process.
|
| virtual int Wait() = 0;
|
|
|
| // Start and wait for this process to finish. Returns same value as
|
| @@ -90,6 +98,10 @@ class Process {
|
|
|
| // Returns if |pid| is a currently running process.
|
| static bool ProcessExists(pid_t pid);
|
| +
|
| + // When returned from Wait or Run, indicates an error may have occurred
|
| + // creating the process.
|
| + enum { kErrorExitStatus = 127 };
|
| };
|
|
|
| class ProcessImpl : public Process {
|
| @@ -100,6 +112,8 @@ class ProcessImpl : public Process {
|
| virtual void AddArg(const std::string& arg);
|
| virtual void RedirectOutput(const std::string& output_file);
|
| virtual void RedirectUsingPipe(int child_fd, bool is_input);
|
| + virtual void SetUid(uid_t uid);
|
| + virtual void SetGid(gid_t gid);
|
| virtual int GetPipe(int child_fd);
|
| virtual bool Start();
|
| virtual int Wait();
|
| @@ -122,12 +136,6 @@ class ProcessImpl : public Process {
|
| };
|
| typedef std::map<int, PipeInfo> PipeMap;
|
|
|
| - std::string output_file_;
|
| - std::vector<std::string> arguments_;
|
| - // Map of child target file descriptors (first) to information about
|
| - // pipes created (second).
|
| - PipeMap pipe_map_;
|
| -
|
| void UpdatePid(pid_t new_pid);
|
| bool PopulatePipeMap();
|
|
|
| @@ -136,6 +144,13 @@ class ProcessImpl : public Process {
|
| // process. pid must not be modified except by calling
|
| // UpdatePid(new_pid).
|
| pid_t pid_;
|
| + std::string output_file_;
|
| + std::vector<std::string> arguments_;
|
| + // Map of child target file descriptors (first) to information about
|
| + // pipes created (second).
|
| + PipeMap pipe_map_;
|
| + uid_t uid_;
|
| + gid_t gid_;
|
| };
|
|
|
| } // namespace chromeos
|
|
|