void getptyslave(void) { int t = -1; #ifdef LINEMODE int waslm; #endif struct winsize ws; /* * Opening the slave side may cause initilization of the * kernel tty structure. We need remember the state of * if linemode was turned on * terminal window size * terminal speed * so that we can re-set them if we need to. */ #ifdef LINEMODE waslm = tty_linemode(); #endif /* * Make sure that we don't have a controlling tty, and * that we are the session (process group) leader. */ t = open(_PATH_TTY, O_RDWR); if (t >= 0) { (void) ioctl(t, TIOCNOTTY, (char *)0); (void) close(t); } t = cleanopen(line); if (t < 0) fatalperror(net, line); /* * set up the tty modes as we like them to be. */ init_termbuf(); if (def_row || def_col) { memset((char *)&ws, 0, sizeof(ws)); ws.ws_col = def_col; ws.ws_row = def_row; (void)ioctl(t, TIOCSWINSZ, (char *)&ws); } /* * Settings for sgtty based systems */ /* * Settings for all other termios/termio based * systems, other than 4.4BSD. In 4.4BSD the * kernel does the initial terminal setup. */ tty_rspeed((def_rspeed > 0) ? def_rspeed : 9600); tty_tspeed((def_tspeed > 0) ? def_tspeed : 9600); #ifdef LINEMODE if (waslm) tty_setlinemode(1); #endif /* LINEMODE */ /* * Set the tty modes, and make this our controlling tty. */ set_termbuf(); if (login_tty(t) == -1) fatalperror(net, "login_tty"); if (net > 2) (void) close(net); if (pty > 2) { (void) close(pty); pty = -1; } }
static int getptyslave(void) { #if 0 register int t = -1; # ifdef LINEMODE int waslm; # endif # ifdef TIOCGWINSZ struct winsize ws; # endif /* * Opening the slave side may cause initilization of the * kernel tty structure. We need remember the state of * if linemode was turned on * terminal window size * terminal speed * so that we can re-set them if we need to. */ # ifdef LINEMODE waslm = tty_linemode(); # endif /* * Make sure that we don't have a controlling tty, and * that we are the session (process group) leader. */ t = open(_PATH_TTY, O_RDWR); if (t >= 0) { ioctl(t, TIOCNOTTY, (char *)0); close(t); } t = cleanopen(line); if (t < 0) fatalperror(net, line); #endif /* 0 */ struct winsize ws; int t = ptyslavefd; /* * set up the tty modes as we like them to be. */ init_termbuf(); # ifdef TIOCGWINSZ if (def_row || def_col) { bzero((char *)&ws, sizeof(ws)); ws.ws_col = def_col; ws.ws_row = def_row; ioctl(t, TIOCSWINSZ, (char *)&ws); } # endif /* * Settings for all other termios/termio based * systems, other than 4.4BSD. In 4.4BSD the * kernel does the initial terminal setup. * * XXX what about linux? */ # ifndef OXTABS # define OXTABS 0 # endif termbuf.c_lflag |= ECHO; termbuf.c_oflag |= OPOST|ONLCR|OXTABS; termbuf.c_iflag |= ICRNL; termbuf.c_iflag &= ~IXOFF; tty_rspeed((def_rspeed > 0) ? def_rspeed : 9600); tty_tspeed((def_tspeed > 0) ? def_tspeed : 9600); # ifdef LINEMODE if (waslm) tty_setlinemode(1); # endif /* LINEMODE */ /* * Set the tty modes, and make this our controlling tty. */ set_termbuf(); if (login_tty(t) == -1) fatalperror(net, "login_tty"); if (net > 2) close(net); if (pty > 2) close(pty); return t; }
/* * getptyslave() * * Open the slave side of the pty, and do any initialization * that is necessary. The return value is a file descriptor * for the slave side. */ void getptyslave(void) { int t = -1; struct winsize ws; /* * Opening the slave side may cause initilization of the * kernel tty structure. We need remember the state of * if linemode was turned on * terminal window size * terminal speed * so that we can re-set them if we need to. */ /* * Make sure that we don't have a controlling tty, and * that we are the session (process group) leader. */ #ifdef HAVE_SETSID if(setsid()<0) fatalperror(net, "setsid()"); #else # ifdef TIOCNOTTY t = open(_PATH_TTY, O_RDWR); if (t >= 0) { ioctl(t, TIOCNOTTY, (char *)0); close(t); } # endif #endif # ifdef PARENT_DOES_UTMP /* * Wait for our parent to get the utmp stuff to get done. */ utmp_sig_wait(); # endif t = cleanopen(line); if (t < 0) fatalperror(net, line); #ifdef STREAMSPTY ttyfd = t; /* * Not all systems have (or need) modules ttcompat and pckt so * don't flag it as a fatal error if they don't exist. */ if (really_stream) { /* these are the streams modules that we want pushed. note that they are in reverse order, ptem will be pushed first. maybe_push_modules() will try to push all modules before the first one that isn't already pushed. i.e if ldterm is pushed, only ttcompat will be attempted. all this is because we don't know which modules are available, and we don't know which modules are already pushed (via autopush, for instance). */ char *ttymodules[] = { "ttcompat", "ldterm", "ptem", NULL }; char *ptymodules[] = { "pckt", NULL }; maybe_push_modules(t, ttymodules); maybe_push_modules(ourpty, ptymodules); } #endif /* * set up the tty modes as we like them to be. */ init_termbuf(); # ifdef TIOCSWINSZ if (def_row || def_col) { memset(&ws, 0, sizeof(ws)); ws.ws_col = def_col; ws.ws_row = def_row; ioctl(t, TIOCSWINSZ, (char *)&ws); } # endif /* * Settings for sgtty based systems */ /* * Settings for UNICOS (and HPUX) */ # if defined(_CRAY) || defined(__hpux) termbuf.c_oflag = OPOST|ONLCR|TAB3; termbuf.c_iflag = IGNPAR|ISTRIP|ICRNL|IXON; termbuf.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK; termbuf.c_cflag = EXTB|HUPCL|CS8; # endif /* * Settings for all other termios/termio based * systems, other than 4.4BSD. In 4.4BSD the * kernel does the initial terminal setup. */ # if !(defined(_CRAY) || defined(__hpux)) && (BSD <= 43) # ifndef OXTABS # define OXTABS 0 # endif termbuf.c_lflag |= ECHO; termbuf.c_oflag |= ONLCR|OXTABS; termbuf.c_iflag |= ICRNL; termbuf.c_iflag &= ~IXOFF; # endif tty_rspeed((def_rspeed > 0) ? def_rspeed : 9600); tty_tspeed((def_tspeed > 0) ? def_tspeed : 9600); /* * Set the tty modes, and make this our controlling tty. */ set_termbuf(); if (login_tty(t) == -1) fatalperror(net, "login_tty"); if (net > 2) close(net); if (ourpty > 2) { close(ourpty); ourpty = -1; } }