Fix wrong logic for moving filedescriptors leading to closed stdin

With this fix, tests can now use /dev/null as stdin.

Fixes #2165
This commit is contained in:
Maxime Coste 2018-06-28 22:56:50 +10:00
parent fe57d90091
commit 43b72770ec
2 changed files with 7 additions and 2 deletions

View File

@ -167,7 +167,12 @@ std::pair<String, int> ShellManager::eval(
Pipe child_stdin{not input.empty()}, child_stdout, child_stderr;
pid_t pid = spawn_shell(m_shell.c_str(), cmdline, shell_context.params, kak_env,
[&child_stdin, &child_stdout, &child_stderr] {
auto move = [](int oldfd, int newfd) { dup2(oldfd, newfd); close(oldfd); };
auto move = [](int oldfd, int newfd)
{
if (oldfd == newfd)
return;
dup2(oldfd, newfd); close(oldfd);
};
if (child_stdin.read_fd() != -1)
{

View File

@ -55,7 +55,7 @@ main() {
fi
ui_in="${root}/${dir}/ui-in"
[ ! -f $ui_in ] && ui_in="/dev/tty"
[ ! -f $ui_in ] && ui_in="/dev/null"
number_tests=$(($number_tests + 1))
touch in; cp in out