1276N/Adiff --git a/luit.c b/luit.c
1276N/Aindex 0ece7b6..a0b62cb 100644
1276N/A--- a/luit.c
1276N/A+++ b/luit.c
1068N/A@@ -25,6 +25,7 @@ THE SOFTWARE.
1068N/A #endif
1068N/A
1068N/A #include <stdio.h>
1068N/A+#include <X11/Xosdefs.h>
1068N/A #include <stdlib.h>
1068N/A #include <string.h>
1068N/A #include <locale.h>
1068N/A@@ -36,6 +37,7 @@ THE SOFTWARE.
1068N/A #include <stdarg.h>
1068N/A #include <sys/ioctl.h>
1068N/A #include <signal.h>
1068N/A+#include <termios.h>
1068N/A
1068N/A #include "luit.h"
1068N/A #include "sys.h"
1068N/A@@ -483,9 +485,11 @@ setup_io(int pty)
1068N/A #endif
1068N/A installHandler(SIGCHLD, sigchldHandler);
1068N/A
1068N/A+#ifndef sun
1068N/A rc = copyTermios(0, pty);
1068N/A if (rc < 0)
1068N/A FatalError("Couldn't copy terminal settings\n");
1068N/A+#endif
1068N/A
1068N/A rc = setRawTermios();
1068N/A if (rc < 0)
1276N/A@@ -627,6 +631,10 @@ child(char *line, char *path, char *const argv[])
1068N/A write_waitpipe(c2p_waitpipe);
1068N/A }
1068N/A
1068N/A+#ifdef sun
1068N/A+ restoreTermios_1(tty, TCSAFLUSH);
1068N/A+#endif
1068N/A+
1068N/A if (tty != 0)
1068N/A dup2(tty, 0);
1068N/A if (tty != 1)
1276N/Adiff --git a/sys.c b/sys.c
1276N/Aindex 8463b05..adda4b5 100644
1276N/A--- a/sys.c
1276N/A+++ b/sys.c
1068N/A@@ -24,6 +24,7 @@ THE SOFTWARE.
1068N/A # include "config.h"
1068N/A #endif
683N/A
683N/A+#include <X11/Xosdefs.h>
683N/A #include <stdlib.h>
683N/A #include <string.h>
683N/A #include <stdio.h>
1068N/A@@ -246,6 +247,14 @@ restoreTermios(void)
683N/A }
683N/A
1068N/A int
683N/A+restoreTermios_1(int fd, int opt)
683N/A+{
683N/A+ if(!saved_tio_valid)
683N/A+ return -1;
683N/A+ return tcsetattr(fd, opt, &saved_tio);
683N/A+}
683N/A+
1068N/A+int
683N/A setRawTermios(void)
683N/A {
1068N/A struct termios tio;
1276N/Adiff --git a/sys.h b/sys.h
1276N/Aindex 5bfe0d2..3d95f20 100644
1276N/A--- a/sys.h
1276N/A+++ b/sys.h
1276N/A@@ -38,6 +38,7 @@ int installHandler(int signum, void (*handler) (int));
1068N/A int copyTermios(int sfd, int dfd);
1068N/A int saveTermios(void);
1068N/A int restoreTermios(void);
1068N/A+int restoreTermios_1(int fd, int opt);
1068N/A int setRawTermios(void);
1068N/A char *my_basename(char *path);
1068N/A int allocatePty(int *pty_return, char **line_return);