diff options
author | cognet <cognet@FreeBSD.org> | 2005-09-18 19:23:35 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2005-09-18 19:23:35 +0000 |
commit | 007ea262517b74927effbe0dfbbe564fceb6c06f (patch) | |
tree | 9f6a6a0b8d2efe149ceb2ecc351359fe24ba972b /sys/dev/snp | |
parent | 470e1e423668df42a3d7eb9bde35d09a9da372f6 (diff) | |
download | FreeBSD-src-007ea262517b74927effbe0dfbbe564fceb6c06f.zip FreeBSD-src-007ea262517b74927effbe0dfbbe564fceb6c06f.tar.gz |
Slightly change the API for the SNPSTTY ioctl so that the userland now
provides a file descriptor instead of a dev_t.
Discussed with: phk
MFC after: 3 days
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 3e190c7..c18a4ce 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 |