26 #include <sys/cdefs.h>
29 #include <sys/param.h>
30 #include <sys/systm.h>
32 #include <sys/kernel.h>
35 #include <sys/vnode.h>
37 #include <fs/devfs/devfs.h>
38 #include <fs/devfs/devfs_int.h>
43 .d_version = D_VERSION,
64 if (strcmp(name,
"tty"))
66 sx_sunlock(&clone_drain_lock);
68 sx_slock(&clone_drain_lock);
70 if (!(curthread->td_proc->p_flag & P_CONTROLT))
72 else if (curthread->td_proc->p_session->s_ttyvp == NULL)
74 else if (curthread->td_proc->p_session->s_ttyvp->v_type == VBAD ||
75 curthread->td_proc->p_session->s_ttyvp->v_rdev == NULL) {
79 *dev = curthread->td_proc->p_session->s_ttyvp->v_rdev;
89 EVENTHANDLER_REGISTER(dev_clone,
ctty_clone, 0, 1000);
91 GID_WHEEL, 0666,
"ctty");
void dev_refl(struct cdev *dev)
struct cdev * make_dev_credf(int flags, struct cdevsw *devsw, int unit, struct ucred *cr, uid_t uid, gid_t gid, int mode, const char *fmt,...)
static void ctty_clone(void *arg, struct ucred *cred, char *name, int namelen, struct cdev **dev)
static void ctty_drvinit(void *unused)
static struct cdev * ctty
static struct cdevsw ctty_cdevsw
SYSINIT(cttydev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, ctty_drvinit, NULL)