]> git.proxmox.com Git - mirror_lxc.git/commitdiff
terminal: lxc_terminal_set_stdfds()
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 28 Feb 2018 11:40:43 +0000 (12:40 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Wed, 28 Feb 2018 16:08:08 +0000 (17:08 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/terminal.c

index 715982bb550ba1ac6a98715ded5e897658871ad6..2996206cccde933b156e0558f3d7d51a64e2b3ff 100644 (file)
@@ -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;
 }