diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | configh.in | 3 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | io.c | 10 |
5 files changed, 19 insertions, 5 deletions
@@ -1,3 +1,10 @@ +2011-08-24 Arnold D. Robbins <arnold@skeeve.com> + + Fix pty co-process communication on Ubuntu GNU/Linux. + + * io.c: Add include of <sys/ioctl.h> to get definition of TIOCSCTTY. + (two_way_open): Move call for this ioctl to after setsid() call. + 2011-08-23 Arnold D. Robbins <arnold@skeeve.com> * regex_internal.c (re_string_fetch_byte_case ): Remove @@ -243,6 +243,9 @@ /* Define to 1 if you have the `system' function. */ #undef HAVE_SYSTEM +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#undef HAVE_SYS_IOCTL_H + /* Define to 1 if you have the <sys/param.h> header file. */ #undef HAVE_SYS_PARAM_H @@ -8219,7 +8219,7 @@ fi for ac_header in arpa/inet.h fcntl.h limits.h locale.h libintl.h mcheck.h \ netdb.h netinet/in.h stdarg.h stddef.h string.h \ - sys/param.h sys/socket.h sys/time.h unistd.h \ + sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h \ termios.h stropts.h wchar.h wctype.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` diff --git a/configure.ac b/configure.ac index 28c286f4..ed72522d 100644 --- a/configure.ac +++ b/configure.ac @@ -142,7 +142,7 @@ AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_CHECK_HEADERS(arpa/inet.h fcntl.h limits.h locale.h libintl.h mcheck.h \ netdb.h netinet/in.h stdarg.h stddef.h string.h \ - sys/param.h sys/socket.h sys/time.h unistd.h \ + sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h \ termios.h stropts.h wchar.h wctype.h) if test "$ac_cv_header_string_h" = yes @@ -34,6 +34,9 @@ #undef RE_DUP_MAX /* avoid spurious conflict w/regex.h */ #include <sys/param.h> #endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#endif /* HAVE_SYS_IOCTL_H */ #ifndef O_ACCMODE #define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) @@ -1696,9 +1699,6 @@ two_way_open(const char *str, struct redirect *rp) ioctl(slave, I_PUSH, "ldterm"); #endif -#ifdef TIOCSCTTY - ioctl(slave, TIOCSCTTY, 0); -#endif tcgetattr(slave, &st); st.c_iflag &= ~(ISTRIP | IGNCR | INLCR | IXOFF); st.c_iflag |= (ICRNL | IGNPAR | BRKINT | IXON); @@ -1735,6 +1735,10 @@ two_way_open(const char *str, struct redirect *rp) /* Child process */ setsid(); +#ifdef TIOCSCTTY + ioctl(slave, TIOCSCTTY, 0); +#endif + if (close(master) == -1) fatal(_("close of master pty failed (%s)"), strerror(errno)); if (close(1) == -1) |