From 8ca7b3742216d3b5f294a596fdbd63eff03adbb1 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 28 Feb 2018 12:40:43 +0100 Subject: [PATCH] terminal: lxc_terminal_set_stdfds() Signed-off-by: Christian Brauner --- src/lxc/terminal.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) 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; } -- 2.47.3