renameat
========

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

Gnulib module: renameat

Portability problems fixed by Gnulib:

  * This function does not reject trailing slashes on non-directories on some platforms, as in renameat(fd,"file",fd,"new/"): Solaris 11 2011-11.

  * This function ignores trailing slashes on symlinks on some platforms, such that renameat(fd,"link/",fd,"new") corrupts link: Solaris 9.

  * This function is declared in <unistd.h> instead of <stdio.h> on some platforms: Solaris 11 2011-11.

  * This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. But the replacement function is not safe to be used in libraries and is not multithread-safe.

Portability problems not fixed by Gnulib:

  * POSIX requires that renameat(fd,"symlink-to-dir/",fd,"dir2") rename dir and leave symlink-to-dir dangling; likewise, it requires that renameat(fd,"dir",fd,"dangling/") rename dir so that dangling is no longer a dangling symlink.  This behavior is counter-intuitive, so on some systems, renameat fails with ENOTDIR if either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7.

  * After renaming a non-empty directory over an existing empty directory, the old directory name is still visible through the stat function for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18.

  * This function will not rename a source that is currently opened by any process: mingw, MSVC 9.