vn_fullpath
- convert a vnode reference to a full pathname, given a process context
SYNOPSIS
#include <sys/param.h>
#include <sys/vnode.h> int
Fo vn_fullpath
Fa struct thread *td struct vnode *vp char **retbuf char **freebuf
Fc
DESCRIPTION
The
vn_fullpath ();
function makes a
``best effort''
attempt to generate a string pathname for
the passed (locked) vnode; the resulting path, if any, will be relative to
the root directory of the process associated with the passed thread pointer.
The
vn_fullpath ();
function
is implemented by inspecting the VFS name cache, and attempting to
reconstruct a path from the process root to the object.
This process is necessarily unreliable for several reasons: intermediate
entries in the path may not be found in the cache; files may have more
than one name (hard links), not all file systems use the name cache
(specifically, most synthetic file systems do not); a single name may
be used for more than one file (in the context of file systems covering
other file systems); a file may have no name (if deleted but still
open or referenced).
However, the resulting string may still be more useable to a user than
a vnode pointer value, or a device number and inode number.
Code consuming the results of this function should anticipate (and
properly handle) failure.
Its arguments are:
Fa td
The thread performing the call; this pointer will be dereferenced to find
the process and its file descriptor structure, in order to identify the
root vnode to use.
Fa vp
The vnode to search for; must be locked by the caller.
Fa retbuf
Pointer to a
Vt char *
that
vn_fullpath ();
may (on success) point at a newly
allocated buffer containing the resulting pathname.
Fa freebuf
Pointer to a
Vt char *
that
vn_fullpath ();
may (on success) point at a buffer
to be freed, when the caller is done with
Fa retbuf .
Typical consumers will declare two character pointers:
fullpath
and
freepath
they will set
freepath
to
NULL
and
fullpath
to a name to use
in the event that the call to
vn_fullpath ();
fails.
After done with the value of
fullpath
the caller will check if
freepath
is
non- NULL
and if so, invoke
free(9)
with a pool type of
M_TEMP
RETURN VALUES
If the vnode is successfully converted to a pathname, 0 is returned;
otherwise, an error number is returned.