summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDima Dorfman <dd@FreeBSD.org>2001-04-17 20:53:11 +0000
committerDima Dorfman <dd@FreeBSD.org>2001-04-17 20:53:11 +0000
commit25c7870e5dd003efa828ed1a72f990c199ccb2c0 (patch)
treea2ca615b970995ea484987368aa4a381e5f63006
parente04670b734523b4efc3337995f6f0aa2402fa57f (diff)
Notes
-rw-r--r--sys/dev/snp/snp.c22
-rw-r--r--sys/kern/tty_snoop.c22
2 files changed, 38 insertions, 6 deletions
diff --git a/sys/dev/snp/snp.c b/sys/dev/snp/snp.c
index 442eafdc948f..856092850687 100644
--- a/sys/dev/snp/snp.c
+++ b/sys/dev/snp/snp.c
@@ -287,10 +287,10 @@ snpopen(dev, flag, mode, p)
return (error);
if (dev->si_drv1 == NULL) {
- int mynor = minor(dev);
-
+ if (!(dev->si_flags & SI_NAMED))
+ make_dev(&snp_cdevsw, minor(dev), UID_ROOT, GID_WHEEL,
+ 0600, "snp%d", dev2unit(dev));
dev->si_drv1 = snp = malloc(sizeof(*snp), M_SNP, M_WAITOK|M_ZERO);
- make_dev(&snp_cdevsw, mynor, 0, 0, 0600, "snp%d", mynor);
} else
return (EBUSY);
@@ -365,6 +365,7 @@ snpclose(dev, flags, fmt, p)
free(snp->snp_buf, M_SNP);
snp->snp_flags &= ~SNOOP_OPEN;
dev->si_drv1 = NULL;
+ destroy_dev(dev);
return (snp_detach(snp));
}
@@ -505,10 +506,25 @@ snppoll(dev, events, p)
static void snp_drvinit __P((void *unused));
static void
+snp_clone(void *arg, char *name, int namelen, dev_t *dev)
+{
+ int u;
+
+ if (*dev != NODEV)
+ return;
+ if (dev_stdclone(name, NULL, "snp", &u) != 1)
+ return;
+ *dev = make_dev(&snp_cdevsw, unit2minor(u), UID_ROOT, GID_WHEEL, 0600,
+ "snp%d", u);
+ return;
+}
+
+static void
snp_drvinit(unused)
void *unused;
{
+ EVENTHANDLER_REGISTER(dev_clone, snp_clone, 0, 1000);
cdevsw_add(&snp_cdevsw);
}
diff --git a/sys/kern/tty_snoop.c b/sys/kern/tty_snoop.c
index 442eafdc948f..856092850687 100644
--- a/sys/kern/tty_snoop.c
+++ b/sys/kern/tty_snoop.c
@@ -287,10 +287,10 @@ snpopen(dev, flag, mode, p)
return (error);
if (dev->si_drv1 == NULL) {
- int mynor = minor(dev);
-
+ if (!(dev->si_flags & SI_NAMED))
+ make_dev(&snp_cdevsw, minor(dev), UID_ROOT, GID_WHEEL,
+ 0600, "snp%d", dev2unit(dev));
dev->si_drv1 = snp = malloc(sizeof(*snp), M_SNP, M_WAITOK|M_ZERO);
- make_dev(&snp_cdevsw, mynor, 0, 0, 0600, "snp%d", mynor);
} else
return (EBUSY);
@@ -365,6 +365,7 @@ snpclose(dev, flags, fmt, p)
free(snp->snp_buf, M_SNP);
snp->snp_flags &= ~SNOOP_OPEN;
dev->si_drv1 = NULL;
+ destroy_dev(dev);
return (snp_detach(snp));
}
@@ -505,10 +506,25 @@ snppoll(dev, events, p)
static void snp_drvinit __P((void *unused));
static void
+snp_clone(void *arg, char *name, int namelen, dev_t *dev)
+{
+ int u;
+
+ if (*dev != NODEV)
+ return;
+ if (dev_stdclone(name, NULL, "snp", &u) != 1)
+ return;
+ *dev = make_dev(&snp_cdevsw, unit2minor(u), UID_ROOT, GID_WHEEL, 0600,
+ "snp%d", u);
+ return;
+}
+
+static void
snp_drvinit(unused)
void *unused;
{
+ EVENTHANDLER_REGISTER(dev_clone, snp_clone, 0, 1000);
cdevsw_add(&snp_cdevsw);
}