Skip to content

Commit

Permalink
cygwin: looks like stdout/stdin are reserved words
Browse files Browse the repository at this point in the history
  • Loading branch information
garbas committed May 13, 2015
1 parent 000de69 commit dad7548
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions src/libutil/util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -942,16 +942,16 @@ string runProgram(Path program, bool searchPath, const Strings & args,
checkInterrupt();

/* Create a pipe. */
Pipe stdout, stdin;
stdout.create();
if (!input.empty()) stdin.create();
Pipe out, in;
out.create();
if (!input.empty()) in.create();

/* Fork. */
Pid pid = startProcess([&]() {
if (dup2(stdout.writeSide, STDOUT_FILENO) == -1)
if (dup2(out.writeSide, STDOUT_FILENO) == -1)
throw SysError("dupping stdout");
if (!input.empty()) {
if (dup2(stdin.readSide, STDIN_FILENO) == -1)
if (dup2(in.readSide, STDIN_FILENO) == -1)
throw SysError("dupping stdin");
}

Expand All @@ -967,16 +967,16 @@ string runProgram(Path program, bool searchPath, const Strings & args,
throw SysError(format("executing ‘%1%’") % program);
});

stdout.writeSide.close();
out.writeSide.close();

/* FIXME: This can deadlock if the input is too long. */
if (!input.empty()) {
stdin.readSide.close();
writeFull(stdin.writeSide, input);
stdin.writeSide.close();
in.readSide.close();
writeFull(in.writeSide, input);
in.writeSide.close();
}

string result = drainFD(stdout.readSide);
string result = drainFD(out.readSide);

/* Wait for the child to finish. */
int status = pid.wait(true);
Expand Down

0 comments on commit dad7548

Please sign in to comment.