|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Edward Wang at The University of California, Berkeley. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted provided ! 9: * that: (1) source distributions retain this entire copyright notice and ! 10: * comment, and (2) distributions including binaries display the following ! 11: * acknowledgement: ``This product includes software developed by the ! 12: * University of California, Berkeley and its contributors'' in the ! 13: * documentation or other materials provided with the distribution and in ! 14: * all advertising materials mentioning features or use of this software. ! 15: * Neither the name of the University nor the names of its contributors may ! 16: * be used to endorse or promote products derived from this software without ! 17: * specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: */ ! 22: ! 23: #ifndef lint ! 24: static char sccsid[] = "@(#)wwenviron.c 3.26 (Berkeley) 6/6/90"; ! 25: #endif /* not lint */ ! 26: ! 27: #include "ww.h" ! 28: #ifdef POSIX_TTY ! 29: #include <sys/ioctl.h> ! 30: #endif ! 31: #include <sys/signal.h> ! 32: ! 33: /* ! 34: * Set up the environment of this process to run in window 'wp'. ! 35: */ ! 36: wwenviron(wp) ! 37: register struct ww *wp; ! 38: { ! 39: register i; ! 40: #ifndef TIOCSCTTY ! 41: int pgrp = getpid(); ! 42: #endif ! 43: char buf[1024]; ! 44: ! 45: #ifndef TIOCSCTTY ! 46: if ((i = open("/dev/tty", 0)) < 0) ! 47: goto bad; ! 48: if (ioctl(i, TIOCNOTTY, (char *)0) < 0) ! 49: goto bad; ! 50: (void) close(i); ! 51: #endif ! 52: if ((i = wp->ww_socket) < 0) { ! 53: struct winsize winsize; ! 54: ! 55: if ((i = open(wp->ww_ttyname, 2)) < 0) ! 56: goto bad; ! 57: if (wwsettty(i, &wwwintty, (struct ww_tty *)0) < 0) ! 58: goto bad; ! 59: winsize.ws_row = wp->ww_w.nr; ! 60: winsize.ws_col = wp->ww_w.nc; ! 61: winsize.ws_xpixel = winsize.ws_ypixel = 0; ! 62: if (ioctl(i, TIOCSWINSZ, (char *)&winsize) < 0) ! 63: goto bad; ! 64: } ! 65: (void) dup2(i, 0); ! 66: (void) dup2(i, 1); ! 67: (void) dup2(i, 2); ! 68: for (i = wwdtablesize - 1; i > 2; i--) ! 69: (void) close(i); ! 70: #ifdef TIOCSCTTY ! 71: (void) setsid(0); ! 72: (void) ioctl(0, TIOCSCTTY, 0); ! 73: #else ! 74: (void) ioctl(0, TIOCSPGRP, (char *)&pgrp); ! 75: (void) setpgrp(pgrp, pgrp); ! 76: #endif ! 77: /* SIGPIPE is the only one we ignore */ ! 78: (void) signal(SIGPIPE, SIG_DFL); ! 79: (void) sigsetmask(0); ! 80: /* ! 81: * Two conditions that make destructive setenv ok: ! 82: * 1. setenv() copies the string, ! 83: * 2. we've already called tgetent which copies the termcap entry. ! 84: */ ! 85: (void) sprintf(buf, "%sco#%d:li#%d:%s", ! 86: WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr, wwwintermcap); ! 87: (void) setenv("TERMCAP", buf, 1); ! 88: (void) sprintf(buf, "%d", wp->ww_id + 1); ! 89: (void) setenv("WINDOW_ID", buf, 1); ! 90: return 0; ! 91: bad: ! 92: wwerrno = WWE_SYS; ! 93: return -1; ! 94: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.