From: Jim Meyering Date: Mon, 18 Jan 1999 02:41:13 +0000 (+0000) Subject: (do_link): Try to remove DEST even after renaming it. X-Git-Tag: TEXTUTILS-1_22h~158 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e11c197cc2d66fe171483b8e1eb818098d3bfe81;p=thirdparty%2Fcoreutils.git (do_link): Try to remove DEST even after renaming it. This fixes a bug reported by Jamie Lokier. --- diff --git a/src/ln.c b/src/ln.c index 568171e924..093b9e6f43 100644 --- a/src/ln.c +++ b/src/ln.c @@ -283,7 +283,12 @@ do_link (const char *source, const char *dest) dest_backup = NULL; } } - else if (unlink (dest) && errno != ENOENT) + + /* Try to unlink DEST even if we may have renamed it. In some unusual + cases (when DEST and DEST_BACKUP are hard-links that refer to the + same file), rename succeeds and DEST remains. If we didn't remove + DEST in that case, the subsequent LINKFUNC call would fail. */ + if (unlink (dest) && errno != ENOENT) { error (0, errno, _("cannot remove `%s'"), dest); return 1;