logo

utils-std

Collection of commonly available Unix tools git clone https://anongit.hacktivis.me/git/utils-std.git/
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:

Mcmd/ln.112++++++++++--
Mcmd/ln.c15++++++++++-----
Mtest-cmd/ln.t5+++++
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 . .