summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--coreutils/ln.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/coreutils/ln.c b/coreutils/ln.c
index ddad120d1..6da290c11 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -40,8 +40,12 @@ int ln_main(int argc, char **argv)
last = argv[argc - 1];
argv += optind;
- if (argc == optind + 1) {
+ if (!argv[1]) {
+ /* "ln PATH/TO/FILE" -> "ln PATH/TO/FILE FILE" */
*--argv = last;
+ /* xstrdup is needed: "ln -s PATH/TO/FILE/" is equivalent to
+ * "ln -s PATH/TO/FILE/ FILE", not "ln -s PATH/TO/FILE FILE"
+ */
last = bb_get_last_path_component_strip(xstrdup(last));
}