* Pipe /dev/null into stdin.
This commit is contained in:
parent
2de8504791
commit
1472cc4825
1 changed files with 10 additions and 0 deletions
10
src/exec.cc
10
src/exec.cc
|
@ -34,6 +34,9 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static string pathNullDevice = "/dev/null";
|
||||||
|
|
||||||
|
|
||||||
/* Run a program. */
|
/* Run a program. */
|
||||||
void runProgram(const string & program,
|
void runProgram(const string & program,
|
||||||
const Strings & args, const Environment & env)
|
const Strings & args, const Environment & env)
|
||||||
|
@ -97,6 +100,13 @@ void runProgram(const string & program,
|
||||||
if (dup2(STDERR_FILENO, STDOUT_FILENO) == -1)
|
if (dup2(STDERR_FILENO, STDOUT_FILENO) == -1)
|
||||||
throw SysError("cannot dup stderr into stdout");
|
throw SysError("cannot dup stderr into stdout");
|
||||||
|
|
||||||
|
/* Reroute stdin to /dev/null. */
|
||||||
|
int fdDevNull = open(pathNullDevice.c_str(), O_RDWR);
|
||||||
|
if (fdDevNull == -1)
|
||||||
|
throw SysError(format("cannot open `%1%'") % pathNullDevice);
|
||||||
|
if (dup2(fdDevNull, STDIN_FILENO) == -1)
|
||||||
|
throw SysError("cannot dup null device into stdin");
|
||||||
|
|
||||||
/* Execute the program. This should not return. */
|
/* Execute the program. This should not return. */
|
||||||
execve(program.c_str(), (char * *) argArr, (char * *) envArr);
|
execve(program.c_str(), (char * *) argArr, (char * *) envArr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue