readlinkat
==========

POSIX specification: http://www.opengroup.org/onlinepubs/9699919799/functions/readlinkat.html

Gnulib module: readlinkat

Portability problems fixed by Gnulib:

  * This function is missing on some platforms: glibc 2.3.6, MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, Interix 3.5, BeOS.

Portability problems not fixed by Gnulib:

  * This function always fails on platforms that don't support symlinks: mingw

  * When readlink is called on a directory: In the case of NFS mounted directories, Cygwin sets errno to ENOENT or EIO instead of EINVAL.  To avoid this problem, check for a directory before calling readlink.

  * When readlink is called on a file that is not a symbolic link: Irix may set errno to ENXIO instead of EINVAL.  Cygwin may set errno to EACCES instead of EINVAL.

  * Symlink contents do not always have a trailing null byte, and there is no indication if symlink contents were truncated if the return value matches the length.  Furthermore, AIX 5.1 and HP-UX 11 set errno to ERANGE rather than returning truncated contents, and Linux sets errno to EINVAL if the requested length is zero.  Use the gnulib module areadlink for improved ability to read symlink contents.