diff options
author | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
commit | 3a9241add947cb6d24b5de7a8927517426a78795 (patch) | |
tree | d122ab6570439cd6b17c7d73ed8d4e085e0b8a95 /toys/posix/basename.c | |
parent | 689f095bc976417bf50810fe59a3b3ac32b21105 (diff) | |
download | toybox-3a9241add947cb6d24b5de7a8927517426a78795.tar.gz |
Move commands into "posix", "lsb", and "other" menus/directories.
Diffstat (limited to 'toys/posix/basename.c')
-rw-r--r-- | toys/posix/basename.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/toys/posix/basename.c b/toys/posix/basename.c new file mode 100644 index 00000000..9f228b41 --- /dev/null +++ b/toys/posix/basename.c @@ -0,0 +1,45 @@ +/* vi: set sw=4 ts=4: + * + * basename.c - Return non-directory portion of a pathname + * + * Copyright 2012 Tryn Mirell <tryn@mirell.org> + * + * See http://opengroup.org/onlinepubs/9699919799/utilities/basename.html + + +USE_BASENAME(NEWTOY(basename, "<1>2", TOYFLAG_USR|TOYFLAG_BIN)) + +config BASENAME + bool "basename" + default y + help + usage: basename string [suffix] + + Return non-directory portion of a pathname removing suffix +*/ + +#include "toys.h" + +void basename_main(void) +{ + char *arg = toys.optargs[0], *suffix = toys.optargs[1], *base; + + while ((base = strrchr(arg, '/'))) { + if (base == arg) break; + if (!base[1]) *base = 0; + else { + base++; + break; + } + } + + if (!base) base = arg; + + // chop off the suffix if provided + if (suffix) { + arg = base + strlen(base) - strlen(suffix); + if (arg > base && !strcmp(arg, suffix)) *arg = 0; + } + + puts(base); +} |