summaryrefslogtreecommitdiffstats
path: root/bin/ln/ln.c
diff options
context:
space:
mode:
authorsheldonh <sheldonh@FreeBSD.org>1999-12-20 16:13:47 +0000
committersheldonh <sheldonh@FreeBSD.org>1999-12-20 16:13:47 +0000
commit61c79b122e44f58607ac5f393bcf9b4a7a821178 (patch)
treeed04b5fbbf6e1897e6a52c236a7e251ae7ef66c5 /bin/ln/ln.c
parentfb59e40253fef0113a40fb946389c81e296d4068 (diff)
downloadFreeBSD-src-61c79b122e44f58607ac5f393bcf9b4a7a821178.zip
FreeBSD-src-61c79b122e44f58607ac5f393bcf9b4a7a821178.tar.gz
Add link(1) and unlink(1) as special cases of ln(1) and rm(1)
respectively, in accordance with SUSv2. This differs from the approach taken in NetBSD, but provides less obscure error messages in at least the EISDIR case and does not take up additional disk space for new binaries. PR: 13071 PR: 13074 Requested by: James Howard <howardjp@wam.umd.edu>
Diffstat (limited to 'bin/ln/ln.c')
-rw-r--r--bin/ln/ln.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/bin/ln/ln.c b/bin/ln/ln.c
index 48dbeae..dc2db0f 100644
--- a/bin/ln/ln.c
+++ b/bin/ln/ln.c
@@ -73,7 +73,24 @@ main(argc, argv)
extern int optind;
struct stat sb;
int ch, exitval;
- char *sourcedir;
+ char *p, *sourcedir;
+
+ /*
+ * Test for the special case where the utility is called as
+ * "link", for which the functionality provided is greatly
+ * simplified.
+ */
+ if ((p = rindex(argv[0], '/')) == NULL)
+ p = argv[0];
+ else
+ ++p;
+ if (strcmp(p, "link") == 0) {
+ if (argc == 3) {
+ linkf = link;
+ exit(linkit(argv[1], argv[2], 0));
+ } else
+ usage();
+ }
while ((ch = getopt(argc, argv, "fsv")) != -1)
switch (ch) {
@@ -167,8 +184,9 @@ linkit(target, source, isdir)
void
usage()
{
- (void)fprintf(stderr, "%s\n%s\n",
+ (void)fprintf(stderr, "%s\n%s\n%s\n",
"usage: ln [-fsv] file1 file2",
- " ln [-fsv] file ... directory");
+ " ln [-fsv] file ... directory",
+ " link file1 file2");
exit(1);
}
OpenPOWER on IntegriCloud