Gnulib module: renameat
Portability problems fixed by Gnulib:
<unistd.h>, not in
<stdio.h>, on some platforms: NetBSD 7.0, Solaris 11.4.
<sys/stat.h>, not in
<stdio.h>, on some platforms: Android 4.3.
renameat(fd,"file",fd,"new/"): Solaris 11.4.
renameat(fd,"link/",fd,"new")corrupts link: Solaris 9.
Portability problems not fixed by Gnulib:
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,
ENOTDIRif either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7.
renameatdo nothing and return 0 if the source and destination are hard links to the same file. This behavior is counterintuitive, and on some systems
renameatis a no-op in this way only if the source and destination identify the same directory entry. On these systems, for example, although renaming ./f to f is a no-op, renaming f to g deletes f when f and g are hard links to the same file: NetBSD 7.0.
statfunction for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18.