From: Christian Brauner Date: Wed, 28 Feb 2018 11:40:43 +0000 (+0100) Subject: terminal: lxc_terminal_set_stdfds() X-Git-Tag: lxc-3.0.0.beta1~4^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ca7b3742216d3b5f294a596fdbd63eff03adbb1;p=thirdparty%2Flxc.git terminal: lxc_terminal_set_stdfds() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c index 715982bb5..2996206cc 100644 --- a/src/lxc/terminal.c +++ b/src/lxc/terminal.c @@ -931,28 +931,33 @@ err: return -ENODEV; } +static bool __terminal_dup2(int duplicate, int original) +{ + int ret; + + if (!isatty(original)) + return true; + + ret = dup2(duplicate, original); + if (ret < 0) { + SYSERROR("Failed to dup2(%d, %d)", duplicate, original); + return false; + } + + return true; +} + int lxc_terminal_set_stdfds(int fd) { + int i; + if (fd < 0) return 0; - if (isatty(STDIN_FILENO)) - if (dup2(fd, STDIN_FILENO) < 0) { - SYSERROR("failed to duplicate stdin."); - return -1; - } - - if (isatty(STDOUT_FILENO)) - if (dup2(fd, STDOUT_FILENO) < 0) { - SYSERROR("failed to duplicate stdout."); + for (i = 0; i < 3; i++) + if (!__terminal_dup2(fd, (int[]){STDIN_FILENO, STDOUT_FILENO, + STDERR_FILENO}[i])) return -1; - } - - if (isatty(STDERR_FILENO)) - if (dup2(fd, STDERR_FILENO) < 0) { - SYSERROR("failed to duplicate stderr."); - return -1; - } return 0; }