diff options
| author | Olivier Houchard <cognet@FreeBSD.org> | 2005-09-18 19:23:35 +0000 |
|---|---|---|
| committer | Olivier Houchard <cognet@FreeBSD.org> | 2005-09-18 19:23:35 +0000 |
| commit | 30ce1aad9c81e2886a6132006530020c87c41484 (patch) | |
| tree | 9f6a6a0b8d2efe149ceb2ecc351359fe24ba972b /sys/dev/snp | |
| parent | 323d07b497f1f4cc43a82df650248db73797cc85 (diff) | |
Notes
Diffstat (limited to 'sys/dev/snp')
| -rw-r--r-- | sys/dev/snp/snp.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/dev/snp/snp.c b/sys/dev/snp/snp.c index 3e190c70909a..c18a4cecd204 100644 --- a/sys/dev/snp/snp.c +++ b/sys/dev/snp/snp.c @@ -30,6 +30,8 @@ __FBSDID("$FreeBSD$"); #include <sys/queue.h> #include <sys/snoop.h> #include <sys/uio.h> +#include <sys/file.h> +#include <sys/vnode.h> static l_close_t snplclose; static l_write_t snplwrite; @@ -518,16 +520,22 @@ snpioctl(dev, cmd, data, flags, td) struct snoop *snp; struct tty *tp, *tpo; struct cdev *tdev; + struct file *fp; int s; snp = dev->si_drv1; switch (cmd) { case SNPSTTY: -#if 0 - tdev = findcdev(*((dev_t *)data)); -#else - tdev = NULL; -#endif + s = *(int *)data; + if (s < 0 || fget(td, s, &fp) != 0) + return (EINVAL); + if (fp->f_type != DTYPE_VNODE || + fp->f_vnode->v_type != VCHR) { + fdrop(fp, td); + return (EINVAL); + } + tdev = fp->f_vnode->v_rdev; + fdrop(fp, td); if (tdev == NULL) return (snp_down(snp)); @@ -585,6 +593,7 @@ snpioctl(dev, cmd, data, flags, td) *(int *)data = snp->snp_len; else if (snp->snp_flags & SNOOP_DOWN) { + printf("IT IS DOWN\n"); if (snp->snp_flags & SNOOP_OFLOW) *(int *)data = SNP_OFLOW; else |
