Mercurial > hg > toybox
changeset 461:ca74293f87f1
Add ln from Andre Renaud.
author | Rob Landley <rob@landley.net> |
---|---|
date | Mon, 13 Feb 2012 22:57:30 -0600 |
parents | 55d815926c5c |
children | 3947b397c328 |
files | toys/ln.c |
diffstat | 1 files changed, 48 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/ln.c Mon Feb 13 22:57:30 2012 -0600 @@ -0,0 +1,48 @@ +/* vi: set sw=4 ts=4: + * + * ln.c - Create filesystem links + * + * Copyright 2012 Andre Renaud <andre@bluewatersys.com> + * + * 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); + } +}