resolvepath - resolve all symbolic links of a path name
int resolvepath(const char *path, char *buf, size_t bufsiz);
The resolvepath() function fully resolves all symbolic links
in the path name path into a resulting path name free of
symbolic links and places the resulting path name in the
buffer buf which has size bufsiz. The resulting path name
names the same file or directory as the original path name.
All ``.'' components are eliminated and every non-leading
``..'' component is eliminated together with its preceding
directory component. If leading ``..'' components reach to
the root directory, they are replaced by ``/''. If the
number of bytes in the resulting path name is less than buf-
siz, the contents of the remainder of buf are unspecified.
Upon successful completion, resolvepath() returns the count
of bytes placed in the buffer. Otherwise, it returns -1,
leaves the buffer unchanged, and sets errno to indicate the
The resolvepath() function will fail if:
Search permission is denied for a component of the
path prefix of path or for a path prefix component
resulting from the resolution of a symbolic link.
The path or buf argument points to an illegal address.
EIO An I/O error occurred while reading from the file sys-
The path argument is an empty string or a component of
path or a path name component produced by resolving a
symbolic link does not name an existing file.
ELOOP Too many symbolic links were encountered in resolving
The length of path exceeds PATH_MAX, or a path name
component is longer than NAME_MAX. Path name
resolution of a symbolic link produced an intermediate
result whose length exceeds PATH_MAX or a component
whose length exceeds NAME_MAX.
A component of the path prefix of path or of a path
prefix component resulting from the resolution of a
symbolic link is not a directory.
No more than PATH_MAX bytes will be placed in the buffer.
Applications should not assume that the returned contents of
the buffer are null-terminated.
Man(1) output converted with