From 20d25e8b9d175a1b750e726b37a10d00f253fc70 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 13 Feb 2012 22:57:30 -0600 Subject: [PATCH] Add ln from Andre Renaud. --- toys/ln.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 toys/ln.c diff --git a/toys/ln.c b/toys/ln.c new file mode 100644 index 0000000..9dd413f --- /dev/null +++ b/toys/ln.c @@ -0,0 +1,48 @@ +/* vi: set sw=4 ts=4: + * + * ln.c - Create filesystem links + * + * Copyright 2012 Andre Renaud + * + * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html + +USE_LN(NEWTOY(ln, "fs", TOYFLAG_BIN)) + +config LN + bool "ln" + default n + help + usage: ln [-s] [-f] file1 file2 + + Create a link from file2 to file1 + + -s Create a symbolic link + -f Force the creation of the link, even if file2 already exists +*/ + +#include "toys.h" + +#define FLAG_s 1 +#define FLAG_f 2 + +void ln_main(void) +{ + char *file1 = toys.optargs[0], *file2 = toys.optargs[1]; + + /* FIXME: How do we print out the usage info? */ + if (!file1 || !file2) + perror_exit("Usage: ln [-s] [-f] file1 file2"); + /* Silently unlink the existing target. If it doesn't exist, + * then we just move on */ + if (toys.optflags & FLAG_f) + unlink(file2); + if (toys.optflags & FLAG_s) { + if (symlink(file1, file2)) + perror_exit("cannot create symbolic link from %s to %s", + file1, file2); + } else { + if (link(file1, file2)) + perror_exit("cannot create hard link from %s to %s", + file1, file2); + } +} -- 2.7.4