diff options
author | kib <kib@FreeBSD.org> | 2008-03-31 11:53:03 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2008-03-31 11:53:03 +0000 |
commit | fe816f911f1158c855969c8149c56dc1e43e8007 (patch) | |
tree | 1e6f71e38bd90fdf73b4e58f98dcb895e58244da | |
parent | 142c75022da4d428472221a3599681e97aca2d73 (diff) | |
download | FreeBSD-src-fe816f911f1158c855969c8149c56dc1e43e8007.zip FreeBSD-src-fe816f911f1158c855969c8149c56dc1e43e8007.tar.gz |
Add the utility function vn_commname() to retrieve the command name
from the vfs namecache, when available.
Reviewed by: rwatson, rdivacky
Tested by: pho
-rw-r--r-- | sys/kern/vfs_cache.c | 19 | ||||
-rw-r--r-- | sys/sys/vnode.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c index 6e49a1b..3d254f3 100644 --- a/sys/kern/vfs_cache.c +++ b/sys/kern/vfs_cache.c @@ -838,3 +838,22 @@ vn_fullpath1(struct thread *td, struct vnode *vp, struct vnode *rdir, *retbuf = bp; return (0); } + +int +vn_commname(struct vnode *vp, char *buf, u_int buflen) +{ + struct namecache *ncp; + int l; + + CACHE_LOCK(); + ncp = TAILQ_FIRST(&vp->v_cache_dst); + if (!ncp) { + CACHE_UNLOCK(); + return (ENOENT); + } + l = min(ncp->nc_nlen, buflen - 1); + memcpy(buf, ncp->nc_name, l); + CACHE_UNLOCK(); + buf[l] = '\0'; + return (0); +} diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index feeac69..b82ab13 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -579,6 +579,7 @@ int speedup_syncer(void); vn_fullpath(FIRST_THREAD_IN_PROC(p), (p)->p_textvp, rb, rfb) int vn_fullpath(struct thread *td, struct vnode *vn, char **retbuf, char **freebuf); +int vn_commname(struct vnode *vn, char *buf, u_int buflen); int vaccess(enum vtype type, mode_t file_mode, uid_t file_uid, gid_t file_gid, mode_t acc_mode, struct ucred *cred, int *privused); |