terminal: lxc_terminal_set_stdfds()

parent 1a443ac1
...@@ -931,28 +931,33 @@ err: ...@@ -931,28 +931,33 @@ err:
return -ENODEV; return -ENODEV;
} }
int lxc_terminal_set_stdfds(int fd) static bool __terminal_dup2(int duplicate, int original)
{ {
if (fd < 0) int ret;
return 0;
if (isatty(STDIN_FILENO)) if (!isatty(original))
if (dup2(fd, STDIN_FILENO) < 0) { return true;
SYSERROR("failed to duplicate stdin.");
return -1;
}
if (isatty(STDOUT_FILENO)) ret = dup2(duplicate, original);
if (dup2(fd, STDOUT_FILENO) < 0) { if (ret < 0) {
SYSERROR("failed to duplicate stdout."); SYSERROR("Failed to dup2(%d, %d)", duplicate, original);
return -1; return false;
} }
if (isatty(STDERR_FILENO)) return true;
if (dup2(fd, STDERR_FILENO) < 0) { }
SYSERROR("failed to duplicate stderr.");
int lxc_terminal_set_stdfds(int fd)
{
int i;
if (fd < 0)
return 0;
for (i = 0; i < 3; i++)
if (!__terminal_dup2(fd, (int[]){STDIN_FILENO, STDOUT_FILENO,
STDERR_FILENO}[i]))
return -1; return -1;
}
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment