diff options
author | phk <phk@FreeBSD.org> | 2003-07-04 12:20:27 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-07-04 12:20:27 +0000 |
commit | 1e9246857202241772eba9f3150f907fb21e9458 (patch) | |
tree | a57fe0e97b69ccff60e4e8e8e43d587ac94c6a1f /sys/kern/kern_descrip.c | |
parent | dc3d80bafd420197c73aea986dd87516eac48b3a (diff) | |
download | FreeBSD-src-1e9246857202241772eba9f3150f907fb21e9458.zip FreeBSD-src-1e9246857202241772eba9f3150f907fb21e9458.tar.gz |
Use the f_vnode field to tell which file descriptors have a vnode.
Diffstat (limited to 'sys/kern/kern_descrip.c')
-rw-r--r-- | sys/kern/kern_descrip.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index c61d08a..43cbe5c 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -1016,28 +1016,22 @@ fpathconf(td, uap) td->td_retval[0] = async_io_version; goto out; } - switch (fp->f_type) { - case DTYPE_PIPE: - case DTYPE_SOCKET: - if (uap->name != _PC_PIPE_BUF) { - error = EINVAL; - } else { - td->td_retval[0] = PIPE_BUF; - error = 0; - } - break; - case DTYPE_FIFO: - case DTYPE_VNODE: - vp = fp->f_vnode; + vp = fp->f_vnode; + if (vp != NULL) { mtx_lock(&Giant); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); error = VOP_PATHCONF(vp, uap->name, td->td_retval); VOP_UNLOCK(vp, 0, td); mtx_unlock(&Giant); - break; - default: + } else if (fp->f_type == DTYPE_PIPE || fp->f_type == DTYPE_SOCKET) { + if (uap->name != _PC_PIPE_BUF) { + error = EINVAL; + } else { + td->td_retval[0] = PIPE_BUF; + error = 0; + } + } else { error = EOPNOTSUPP; - break; } out: fdrop(fp, td); @@ -1917,7 +1911,7 @@ _fgetvp(struct thread *td, int fd, struct vnode **vpp, int flags) *vpp = NULL; if ((error = _fget(td, fd, &fp, 0, 0)) != 0) return (error); - if (fp->f_type != DTYPE_VNODE && fp->f_type != DTYPE_FIFO) { + if (fp->f_vnode == NULL) { error = EINVAL; } else { *vpp = fp->f_vnode; |