[git commit] ln: --no-target-directory implies --no-dereference

Denys Vlasenko vda.linux at googlemail.com
Tue Oct 8 12:07:50 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=71b268c7d962a819f88050c2567dced975aa249e
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

as in GNU coreutils

Signed-off-by: Kaarle Ritvanen <kaarle.ritvanen at datakunkku.fi>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/ln.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/coreutils/ln.c b/coreutils/ln.c
index ea2d10eab..5591e8335 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -41,7 +41,6 @@
 
 /* This is a NOEXEC applet. Be very careful! */
 
-
 #define LN_SYMLINK          (1 << 0)
 #define LN_FORCE            (1 << 1)
 #define LN_NODEREFERENCE    (1 << 2)
@@ -63,7 +62,22 @@ int ln_main(int argc, char **argv)
 	int (*link_func)(const char *, const char *);
 
 	opts = getopt32(argv, "^" "sfnbS:vT" "\0" "-1", &suffix);
-
+/*
+	-s, --symbolic		make symbolic links instead of hard links
+	-f, --force		remove existing destination files
+	-n, --no-dereference	treat LINK_NAME as a normal file if it is a symbolic link to a directory
+	-b			like --backup but does not accept an argument
+	--backup[=CONTROL]	make a backup of each existing destination file
+	-S, --suffix=SUFFIX	override the usual backup suffix
+	-v, --verbose
+	-T, --no-target-directory
+	-d, -F, --directory	allow the superuser to attempt to hard link directories
+	-i, --interactive	prompt whether to remove destinations
+	-L, --logical		dereference TARGETs that are symbolic links
+	-P, --physical		make hard links directly to symbolic links
+	-r, --relative		create symbolic links relative to link location
+	-t, --target-directory=DIRECTORY	specify the DIRECTORY in which to create the links
+ */
 	last = argv[argc - 1];
 	argv += optind;
 	argc -= optind;
@@ -86,8 +100,11 @@ int ln_main(int argc, char **argv)
 		src = last;
 
 		if (is_directory(src,
-		                (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE
-		                )
+				/*followlinks:*/ !(opts & (LN_NODEREFERENCE|LN_LINKFILE))
+				/* Why LN_LINKFILE does not follow links:
+				 * -T/--no-target-directory implies -n/--no-dereference
+				 */
+				)
 		) {
 			if (opts & LN_LINKFILE) {
 				bb_error_msg_and_die("'%s' is a directory", src);


More information about the busybox-cvs mailing list