Attached is a patch to make the snp(4) driver play ball with DEVFS.
For better or for worse, I used the bpf(4) driver as a guide on how to
do this.

If someone could review this, and, if nothing is wrong with it, commit
it, I'd appreciate it.

Thanks in advance,

                                        Dima Dorfman
                                        [EMAIL PROTECTED]

Index: tty_snoop.c
===================================================================
RCS file: /st/src/FreeBSD/src/sys/kern/tty_snoop.c,v
retrieving revision 1.52
diff -u -r1.52 tty_snoop.c
--- tty_snoop.c 2001/03/26 12:41:01     1.52
+++ tty_snoop.c 2001/04/17 08:17:23
@@ -286,12 +286,9 @@
        if ((error = suser(p)) != 0)
                return (error);
 
-       if (dev->si_drv1 == NULL) {
-               int mynor = minor(dev);
-
+       if (dev->si_drv1 == NULL)
                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
+       else
                return (EBUSY);
 
        /*
@@ -365,6 +362,7 @@
        free(snp->snp_buf, M_SNP);
        snp->snp_flags &= ~SNOOP_OPEN;
        dev->si_drv1 = NULL;
+       destroy_dev(dev);
 
        return (snp_detach(snp));
 }
@@ -505,10 +503,25 @@
 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);
 }
 

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to