gettimeofday: port recent C++ fix to Emacs
[gnulib.git] / doc / posix-functions / rename.texi
1 @node rename
2 @section @code{rename}
3 @findex rename
4
5 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/rename.html}
6
7 Gnulib module: rename
8
9 Portability problems fixed by Gnulib:
10 @itemize
11 @item
12 This function does not allow trailing slashes when creating a
13 destination directory, as in @code{rename("dir","new/")}:
14 NetBSD 1.6.
15 @item
16 This function does not reject trailing slashes on the destination for
17 non-directories on some platforms, as in @code{rename("file","new/")}:
18 AIX 7.1, Solaris 11 2011-11, Cygwin 1.5.x, mingw, MSVC 9.
19 @item
20 This function does not reject trailing slashes on symlinks to
21 non-directories on some platforms, as in
22 @code{rename("link-to-file/","f")}:
23 FreeBSD 7.2.
24 @item
25 This function ignores trailing slashes on symlinks on some platforms,
26 such that @code{rename("link/","new")} corrupts @file{link}:
27 Solaris 9.
28 @item
29 This function incorrectly reduces the link count when comparing two
30 spellings of a hard link on some platforms:
31 NetBSD 1.6, Cygwin 1.5.x.
32 @item
33 This function will not always replace an existing destination on some
34 platforms:
35 Cygwin 1.5.x, mingw, MSVC 9.
36 However, the replacement is not atomic for directories, and may end up
37 losing the empty destination if the source could not be renamed.
38 @item
39 This function mistakenly allows names ending in @samp{.} or @samp{..}
40 on some platforms:
41 Cygwin 1.5.x, mingw, MSVC 9.
42 @item
43 This function does not reject attempts to rename existing directories
44 and non-directories onto one another on some platforms:
45 Cygwin 1.5.x, mingw, MSVC 9.
46 @item
47 This function does not allow trailing slashes on source directories on
48 older platforms, as in @samp{rename("dir/","new")}:
49 SunOS 4.1.
50 @end itemize
51
52 Portability problems not fixed by Gnulib:
53 @itemize
54 @item
55 POSIX requires that @code{rename("symlink-to-dir/","dir2")} rename
56 @file{dir} and leave @file{symlink-to-dir} dangling; likewise, it
57 requires that @code{rename("dir","dangling/")} rename @file{dir} so
58 that @file{dangling} is no longer a dangling symlink.  This behavior
59 is counter-intuitive, so on some systems, @code{rename} fails with
60 @code{ENOTDIR} if either argument is a symlink with a trailing slash:
61 glibc, OpenBSD, Cygwin 1.7.
62 @item
63 After renaming a non-empty directory over an existing empty directory,
64 the old directory name is still visible through the @code{stat} function
65 for 30 seconds after the rename, on NFS file systems, on some platforms:
66 Linux 2.6.18.
67 @item
68 This function will not rename a source that is currently opened
69 by any process:
70 mingw, MSVC 9.
71 @end itemize