/* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)tty_tty.c 7.4 (Berkeley) 05/05/89 */ /* * Indirect driver for controlling tty. * * THIS IS GARBAGE: MUST SOON BE DONE WITH struct inode * IN PROC TABLE. */ #include "param.h" #include "systm.h" #include "conf.h" #include "user.h" #include "ioctl.h" #include "tty.h" #include "proc.h" #include "uio.h" /*ARGSUSED*/ syopen(dev, flag) dev_t dev; int flag; { if (u.u_ttyp == NULL) return (ENXIO); return ((*cdevsw[major(u.u_ttyd)].d_open)(u.u_ttyd, flag)); } /*ARGSUSED*/ syread(dev, uio, flag) dev_t dev; struct uio *uio; { if (u.u_ttyp == NULL) return (ENXIO); return ((*cdevsw[major(u.u_ttyd)].d_read)(u.u_ttyd, uio, flag)); } /*ARGSUSED*/ sywrite(dev, uio, flag) dev_t dev; struct uio *uio; { if (u.u_ttyp == NULL) return (ENXIO); return ((*cdevsw[major(u.u_ttyd)].d_write)(u.u_ttyd, uio, flag)); } /*ARGSUSED*/ syioctl(dev, cmd, addr, flag) dev_t dev; int cmd; caddr_t addr; int flag; { if (cmd == TIOCNOTTY) { if (SESS_LEADER(u.u_procp)) { /* * XXX - check posix draft */ u.u_ttyp->t_session = 0; u.u_ttyp->t_pgid = 0; } u.u_ttyp = 0; u.u_ttyd = 0; return (0); } if (u.u_ttyp == NULL) return (ENXIO); return ((*cdevsw[major(u.u_ttyd)].d_ioctl)(u.u_ttyd, cmd, addr, flag)); } /*ARGSUSED*/ syselect(dev, flag) dev_t dev; int flag; { if (u.u_ttyp == NULL) { u.u_error = ENXIO; return (0); } return ((*cdevsw[major(u.u_ttyd)].d_select)(u.u_ttyd, flag)); }