commit: 5342b24f9fb82f1c77c50e5bd1a079d65ae4eec5
parent 03cb1a2b8b6ca7d01c50966cbbc5c0a45f9be35e
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Wed, 22 Jan 2025 13:05:16 +0100
cmd/ln: support target-less usage
Diffstat:
3 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/cmd/ln.1 b/cmd/ln.1
@@ -12,12 +12,12 @@
.Op Fl fnv
.Op Fl L Ns | Ns Fl P
.Ar source...
-.Ar target
+.Op Ar target
.Nm
.Fl s
.Op Fl fn
.Ar reference...
-.Ar target
+.Op Ar target
.Sh DESCRIPTION
.Nm
create links at
@@ -37,6 +37,11 @@ are given,
.Nm
will create links into
.Ar target .
+If
+.Ar target
+is unspecified, then it is set to the current directory, as if
+.Qq \&.
+would have been passed.
.Pp
Should be noted that unlike commands like
.Xr cp 1 ,
@@ -78,5 +83,8 @@ The
and
.Fl v
options are extensions.
+Support for unspecified
+.Ar target
+is an extension.
.Sh AUTHORS
.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/cmd/ln.c b/cmd/ln.c
@@ -168,11 +168,19 @@ main(int argc, char *argv[])
argc -= optind;
argv += optind;
- if(argc <= 1)
+ char *dest = argv[argc - 1];
+ char target[PATH_MAX] = "";
+
+ if(argc <= 0)
{
- fprintf(stderr, "ln: error: Not enough operands, %d given, expect >= 2\n", argc);
+ fprintf(stderr, "ln: error: Not enough operands, %d given, expect >= 1\n", argc);
return 1;
}
+ else if(argc == 1)
+ {
+ dest = (char *)".";
+ argc++;
+ }
else if(argc == 2)
{
errno = 0;
@@ -194,9 +202,6 @@ main(int argc, char *argv[])
}
}
- char *dest = argv[argc - 1];
- char target[PATH_MAX] = "";
-
for(int i = 0; i < argc - 1; i++)
{
char *src = argv[i];
diff --git a/test-cmd/ln.t b/test-cmd/ln.t
@@ -90,5 +90,10 @@
hardlink
$ rm -r e_target_dir e_src_dir
+ $ ln -sn //example.org
+ $ readlink ./example.org
+ //example.org
+ $ rm ./example.org
+
$ find .
.