- close (STDIN_FILENO);
- dup (to_remote[remote_pipe_number][PREAD]);
- close (to_remote[remote_pipe_number][PREAD]);
- close (to_remote[remote_pipe_number][PWRITE]);
-
- close (STDOUT_FILENO);
- dup (from_remote[remote_pipe_number][PWRITE]);
- close (from_remote[remote_pipe_number][PREAD]);
- close (from_remote[remote_pipe_number][PWRITE]);
+ if (dup2 (to_remote[remote_pipe_number][PREAD], STDIN_FILENO) < 0
+ || (to_remote[remote_pipe_number][PREAD] != STDIN_FILENO
+ && close (to_remote[remote_pipe_number][PREAD]) != 0)
+ || (to_remote[remote_pipe_number][PWRITE] != STDIN_FILENO
+ && close (to_remote[remote_pipe_number][PWRITE]) != 0)
+ || dup2 (from_remote[remote_pipe_number][PWRITE], STDOUT_FILENO) < 0
+ || close (from_remote[remote_pipe_number][PREAD]) != 0
+ || close (from_remote[remote_pipe_number][PWRITE]) != 0)
+ error (EXIT_ON_EXEC_ERROR, errno,
+ _("Cannot redirect files for remote shell"));