From e11c197cc2d66fe171483b8e1eb818098d3bfe81 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 18 Jan 1999 02:41:13 +0000 Subject: (do_link): Try to remove DEST even after renaming it. This fixes a bug reported by Jamie Lokier. --- src/ln.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/ln.c') diff --git a/src/ln.c b/src/ln.c index 568171e92..093b9e6f4 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; -- cgit v1.2.3-54-g00ecf