read on closed socketpair returns eof
[unix-history] / usr / src / usr.bin / window / wwenviron.c
CommitLineData
aa149fde 1#ifndef lint
1e40e125 2static char sccsid[] = "@(#)wwenviron.c 3.12 %G%";
aa149fde
EW
3#endif
4
5#include "ww.h"
1e40e125 6#include <sys/signal.h>
aa149fde 7
224ba859
EW
8/*
9 * Set up the environment of this process to run in window 'wp'.
224ba859 10 */
aa149fde
EW
11wwenviron(wp)
12register struct ww *wp;
13{
14 register i;
950f1780 15 int pgrp = getpid();
aa149fde 16
7ecf4dca
EW
17 if ((i = open("/dev/tty", 0)) < 0)
18 goto bad;
eec72f58 19 if (ioctl(i, (int)TIOCNOTTY, (char *)0) < 0)
7ecf4dca 20 goto bad;
aa149fde 21 (void) close(i);
7ecf4dca
EW
22 if ((i = wp->ww_socket) < 0 && (i = open(wp->ww_ttyname, 2)) < 0)
23 goto bad;
eec72f58
EW
24 (void) dup2(i, 0);
25 (void) dup2(i, 1);
26 (void) dup2(i, 2);
27 for (i = wwdtablesize - 1; i > 2; i--)
28 (void) close(i);
7ecf4dca 29 (void) ioctl(0, (int)TIOCSPGRP, (char *)&pgrp);
950f1780 30 (void) setpgrp(pgrp, pgrp);
1e40e125 31 (void) signal(SIGPIPE, SIG_DFL);
4222244b 32 (void) sprintf(wwwintermcap, "TERMCAP=%sco#%d:li#%d:%s%s%s%s",
78be6843
EW
33 WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr,
34 wwavailmodes & WWM_REV ? WWT_REV : "",
35 wwavailmodes & WWM_UL ? WWT_UL : "",
36 wwavailmodes & WWM_GRP ? WWT_GRP : "",
37 wwkeys);
7ecf4dca
EW
38 return 0;
39bad:
40 wwerrno = WWE_SYS;
41 return -1;
aa149fde 42}