commit 353ac69a93322a8c97db2dad3dee47447de77032
parent 0cc3beb739fba5c4b27ff28e8886055ee375000d
Author: sin <sin@2f30.org>
Date: Fri, 17 Oct 2014 16:03:41 +0100
Fix a completely broken ln(1)
Diffstat:
M | ln.c | | | 19 | +++++++++---------- |
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/ln.c b/ln.c
@@ -1,10 +1,11 @@
/* See LICENSE file for copyright and license details. */
#include <errno.h>
+#include <libgen.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
-#include <unistd.h>
#include <string.h>
+#include <unistd.h>
#include "util.h"
static void
@@ -32,7 +33,10 @@ main(int argc, char *argv[])
usage();
} ARGEND;
- if(sflag) {
+ if (argc == 0 || argc > 2)
+ usage();
+
+ if (sflag) {
flink = symlink;
fname = "symlink";
} else {
@@ -40,17 +44,12 @@ main(int argc, char *argv[])
fname = "link";
}
- if(argc < 2) {
- if((to = strrchr(argv[0], '/')))
- to++;
- } else {
- to = argv[1];
- }
+ to = argc < 2 ? basename(argv[0]) : argv[1];
if (fflag == true)
- remove(argv[1]);
+ remove(to);
if (flink(argv[0], to) < 0)
- eprintf("%s:", fname);
+ eprintf("%s %s <- %s:", fname, argv[0], to);
return 0;
}