summaryrefslogtreecommitdiff
path: root/sys/dev/snp
diff options
context:
space:
mode:
authorOlivier Houchard <cognet@FreeBSD.org>2005-09-18 19:23:35 +0000
committerOlivier Houchard <cognet@FreeBSD.org>2005-09-18 19:23:35 +0000
commit30ce1aad9c81e2886a6132006530020c87c41484 (patch)
tree9f6a6a0b8d2efe149ceb2ecc351359fe24ba972b /sys/dev/snp
parent323d07b497f1f4cc43a82df650248db73797cc85 (diff)
Notes
Diffstat (limited to 'sys/dev/snp')
-rw-r--r--sys/dev/snp/snp.c19
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