From d475a6bdf24f6a2c040def66676b5105b42d3b63 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 22 Jan 2015 16:26:30 +0000 Subject: [PATCH] Handle ln -sf a foo/ correctly Previously it would not delete foo/a if it already existed. Use unlinkat() instead to do that. --- ln.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ln.c b/ln.c index 0a5bf18..5942f01 100644 --- a/ln.c +++ b/ln.c @@ -67,7 +67,7 @@ main(int argc, char *argv[]) if (!hasto) to = basename(argv[0]); if (fflag) - remove(to); + unlinkat(dirfd, to, 0); if ((!sflag ? linkat(AT_FDCWD, argv[0], dirfd, to, flags) : symlinkat(argv[0], dirfd, to)) < 0) { eprintf("%s %s <- %s:", fname, argv[0], to);