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 10.

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

  * 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 8, Cygwin 1.5.x, mingw, 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.

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