summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2008-03-31 11:53:03 +0000
committerkib <kib@FreeBSD.org>2008-03-31 11:53:03 +0000
commitfe816f911f1158c855969c8149c56dc1e43e8007 (patch)
tree1e6f71e38bd90fdf73b4e58f98dcb895e58244da /sys
parent142c75022da4d428472221a3599681e97aca2d73 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/vfs_cache.c19
-rw-r--r--sys/sys/vnode.h1
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);
OpenPOWER on IntegriCloud