diff --git a/sys/dev/pty/pty.c b/sys/dev/pty/pty.c index 5e2d822..a0b75d5 100644 --- a/sys/dev/pty/pty.c +++ b/sys/dev/pty/pty.c @@ -57,6 +57,9 @@ SYSCTL_UINT(_kern, OID_AUTO, tty_pty_warningcnt, CTLFLAG_RW, &pty_warningcnt, 0, "Warnings that will be triggered upon legacy PTY allocation"); +#define PTY_MAX 100 +static struct cdev *pty_dev[PTY_MAX]; + static int ptydev_fdopen(struct cdev *dev, int fflags, struct thread *td, struct file *fp) { @@ -93,34 +96,6 @@ static struct cdevsw ptydev_cdevsw = { .d_name = "ptydev", }; -static void -pty_clone(void *arg, struct ucred *cr, char *name, int namelen, - struct cdev **dev) -{ - - /* Cloning is already satisfied. */ - if (*dev != NULL) - return; - - /* Only catch /dev/ptyXX. */ - if (namelen != 5 || bcmp(name, "pty", 3) != 0) - return; - - /* Only catch /dev/pty[l-sL-S]X. */ - if (!(name[3] >= 'l' && name[3] <= 's') && - !(name[3] >= 'L' && name[3] <= 'S')) - return; - - /* Only catch /dev/pty[l-sL-S][0-9a-v]. */ - if (!(name[4] >= '0' && name[4] <= '9') && - !(name[4] >= 'a' && name[4] <= 'v')) - return; - - /* Create the controller device node. */ - *dev = make_dev_credf(MAKEDEV_REF, &ptydev_cdevsw, 0, - NULL, UID_ROOT, GID_WHEEL, 0666, "%s", name); -} - static int ptmx_fdopen(struct cdev *dev __unused, int fflags, struct thread *td, struct file *fp) @@ -138,12 +113,15 @@ static struct cdevsw ptmx_cdevsw = { static int pty_modevent(module_t mod, int type, void *data) { + int i; switch(type) { case MOD_LOAD: - EVENTHANDLER_REGISTER(dev_clone, pty_clone, 0, 1000); make_dev_credf(MAKEDEV_ETERNAL_KLD, &ptmx_cdevsw, 0, NULL, UID_ROOT, GID_WHEEL, 0666, "ptmx"); + for (i = 0; i < PTY_MAX; ++i) + pty_dev[i] = make_dev_credf(MAKEDEV_REF, &ptydev_cdevsw, 0, + NULL, UID_ROOT, GID_WHEEL, 0666, "%s%d", "pty", i); break; case MOD_SHUTDOWN: break;