+2007-11-15 Jim Meyering <meyering@redhat.com>
+
+ Avoid misbehavior of a cross-device "mv" or "install".
+ Those programs must not dereference a destination symlink.
+ * src/copy.c (copy_reg): Don't treat a dangling destination symlink
+ differently in move mode. In move mode, the only way the added
+ O_EXCL can cause failure is when some other process has recreated
+ the file this code unlinked a few instructions before.
+
2007-11-14 Jim Meyering <meyering@redhat.com>
Another bootstrap kludge.
the above open fails with EEXIST. If that happens, and
lstat'ing the DST_NAME shows that it is a symlink, repeat
the open call, but this time with the name of the final,
- missing directory entry. */
- if (dest_desc < 0 && dest_errno == EEXIST)
+ missing directory entry. All of this is relevant only for
+ cp, i.e., not in move_mode. */
+ if (dest_desc < 0 && dest_errno == EEXIST && ! x->move_mode)
{
struct stat dangling_link_sb;
if (lstat (dst_name, &dangling_link_sb) == 0