summaryrefslogtreecommitdiffstats
path: root/sys/fs/fifofs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-11-18 17:18:11 +0000
committerphk <phk@FreeBSD.org>2004-11-18 17:18:11 +0000
commita1fa5f3147516f8fa8066807a6819a4847ed332e (patch)
tree15f260e831d829234a7d1b1dcd21c3efd897be7f /sys/fs/fifofs
parent959fcf03575dd43b3572fbcf215290f62ca0feb2 (diff)
downloadFreeBSD-src-a1fa5f3147516f8fa8066807a6819a4847ed332e.zip
FreeBSD-src-a1fa5f3147516f8fa8066807a6819a4847ed332e.tar.gz
Add dropped implementation of ioctl for fifos.
Diffstat (limited to 'sys/fs/fifofs')
-rw-r--r--sys/fs/fifofs/fifo_vnops.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c
index 6ec44ca..387a9e6 100644
--- a/sys/fs/fifofs/fifo_vnops.c
+++ b/sys/fs/fifofs/fifo_vnops.c
@@ -566,8 +566,27 @@ fifo_close_f(struct file *fp, struct thread *td)
static int
fifo_ioctl_f(struct file *fp, u_long com, void *data, struct ucred *cred, struct thread *td)
{
+ struct fifoinfo *fi;
+ struct file filetmp; /* Local, so need not be locked. */
+ int error;
- return (vnops.fo_ioctl(fp, com, data, cred, td));
+ error = ENOTTY;
+ fi = fp->f_data;
+ if (com == FIONBIO)
+ return (0);
+ if (fp->f_flag & FREAD) {
+ filetmp.f_data = fi->fi_readsock;
+ filetmp.f_cred = cred;
+ error = soo_ioctl(&filetmp, com, data, cred, td);
+ if (error)
+ return (error);
+ }
+ if (fp->f_flag & FWRITE) {
+ filetmp.f_data = fi->fi_writesock;
+ filetmp.f_cred = cred;
+ error = soo_ioctl(&filetmp, com, data, cred, td);
+ }
+ return (error);
}
static int
OpenPOWER on IntegriCloud