Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!M.CS.UIUC.EDU!liberte From: liberte@M.CS.UIUC.EDU (Daniel LaLiberte) Newsgroups: gnu.emacs.bug Subject: PTYs Message-ID: <8902271654.AA06363@m.cs.uiuc.edu> Date: 27 Feb 89 16:54:29 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 84 (Posted for someone with questionable mail connection.) (Respond to me or try ccvaxa!marick@cs.uiuc.edu) Date: Tue, 24 Jan 89 14:33:41 CST From: marick (Brian Marick) Version 18.52 (with no local changes) System: Motorola V/68 (s-usg5-3.h, HAVE_PTYS, SYSV_PTYS) Symptom: When configured with PTYs, programs running under a subshell can't open /dev/tty. Hence, ftp (for example) doesn't work in a subshell, nor does rm -i, nor does "echo foo > /dev/tty". Problem: An ifdef seems to be misplaced. See more comments in the diff -c listing below. *** /tmp/ORIG.process.c Tue Jan 24 14:18:52 1989 --- /tmp/process.c Tue Jan 24 14:19:01 1989 *************** *** 1,3 **** --- 1,11 ---- + /* Motorola changes to the standard distribution are marked with the CHANGES + comment. + + Jan-12-89: Fix to make /dev/tty work on subprocesses. -- Marick + + */ + + /* Asynchronous subprocess control for GNU Emacs. Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc. *************** *** 987,1004 **** int xforkin = forkin; int xforkout = forkout; #ifdef HAVE_PTYS - #ifdef TIOCNOTTY /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you can do TIOCSPGRP only to the process's controlling tty. We must make the pty terminal the controlling tty of the child. */ if (ptyname) { /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here? I can't test it since I don't have 4.3. */ int j = open ("/dev/tty", O_RDWR, 0); ioctl (j, TIOCNOTTY, 0); close (j); ! #if !defined (RTU) && !defined(UNIPLUS) #ifdef USG setpgrp (); --- 995,1017 ---- int xforkin = forkin; int xforkout = forkout; #ifdef HAVE_PTYS /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you can do TIOCSPGRP only to the process's controlling tty. We must make the pty terminal the controlling tty of the child. */ if (ptyname) { + /* CHANGES: In stock 18.52, this TIOCNOTTY wrapped the same + code as the HAVE_PTYS. That broke (at least) Motorola + System V machines. Putting it here works for both Motorola + and Gould (BSD-4.3-derived) machines. Don't know about RTU + or UNIPLUS. */ + #ifdef TIOCNOTTY /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here? I can't test it since I don't have 4.3. */ int j = open ("/dev/tty", O_RDWR, 0); ioctl (j, TIOCNOTTY, 0); close (j); ! #endif /* TIOCNOTTY */ #if !defined (RTU) && !defined(UNIPLUS) #ifdef USG setpgrp (); *************** *** 1012,1018 **** abort (); #endif /* not UNIPLUS and not RTU */ } - #endif /* TIOCNOTTY */ #endif /* HAVE_PTYS */ child_setup_tty (xforkout); child_setup (xforkin, xforkout, xforkout, new_argv, env); --- 1025,1030 ----