From 60bd53b164c6f3ebe8ff23d8c89209d883ddbb7a Mon Sep 17 00:00:00 2001 From: jhb Date: Mon, 7 Feb 2005 21:46:43 +0000 Subject: Implement a kern_pathconf() wrapper for pathconf() which can take the filename from either a user space or a kernel space pointer. --- sys/kern/vfs_extattr.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'sys/kern/vfs_extattr.c') diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index cfefd08..81a3235 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -2223,22 +2223,28 @@ pathconf(td, uap) int name; } */ *uap; { - int error; + + return (kern_pathconf(td, uap->path, UIO_USERSPACE, uap->name)); +} + +int +kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg, int name) +{ struct nameidata nd; - int vfslocked; + int error, vfslocked; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | NOOBJ | MPSAFE, UIO_USERSPACE, - uap->path, td); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | NOOBJ | MPSAFE, pathseg, path, + td); if ((error = namei(&nd)) != 0) return (error); vfslocked = NDHASGIANT(&nd); NDFREE(&nd, NDF_ONLY_PNBUF); /* If asynchronous I/O is available, it works for all files. */ - if (uap->name == _PC_ASYNC_IO) + if (name == _PC_ASYNC_IO) td->td_retval[0] = async_io_version; else - error = VOP_PATHCONF(nd.ni_vp, uap->name, td->td_retval); + error = VOP_PATHCONF(nd.ni_vp, name, td->td_retval); vput(nd.ni_vp); VFS_UNLOCK_GIANT(vfslocked); return (error); -- cgit v1.1