diff options
author | phk <phk@FreeBSD.org> | 2004-11-18 17:18:11 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-11-18 17:18:11 +0000 |
commit | a1fa5f3147516f8fa8066807a6819a4847ed332e (patch) | |
tree | 15f260e831d829234a7d1b1dcd21c3efd897be7f /sys/fs | |
parent | 959fcf03575dd43b3572fbcf215290f62ca0feb2 (diff) | |
download | FreeBSD-src-a1fa5f3147516f8fa8066807a6819a4847ed332e.zip FreeBSD-src-a1fa5f3147516f8fa8066807a6819a4847ed332e.tar.gz |
Add dropped implementation of ioctl for fifos.
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/fifofs/fifo_vnops.c | 21 |
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 |