Mercurial > hg > toybox
changeset 404:ad5ffc45aa62
Initial 'basename' implementation
author | Tryn Mirell <tryn@mirell.org> |
---|---|
date | Sun, 15 Jan 2012 23:20:06 -0600 |
parents | f6ffc6685a9e |
children | a8b14410e784 |
files | toys/basename.c |
diffstat | 1 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/basename.c Sun Jan 15 23:20:06 2012 -0600 @@ -0,0 +1,53 @@ +/* vi: set sw=4 ts=4: + * + * basename.c + +USE_BASENAME(NEWTOY(basename, NULL, TOYFLAG_USR|TOYFLAG_BIN)) + +config BASENAME + bool "basename" + default n + help + usage: basename string [suffix] + Return non-directory portion of a pathname +*/ + +#include "toys.h" + +void basename_main(void) +{ + char *arg, *suffix, *base; + int arglen; + + arg = toys.optargs[0]; + suffix = toys.optargs[1]; + + // return null string if nothing provided + if (!arg) return; + + arglen = strlen(arg); + + // handle the case where we only have single slash + if (arglen == 1 && arg[0] == '/') { + puts("/"); + return; + } + + // remove trailing slash + if (arg[arglen - 1] == '/') { + arg[arglen - 1] = 0; + } + + // get everything past the last / + base = strrchr(arg, '/') + 1; + + // handle the case where we have all slashes + if (base[0] == 0) base = "/"; + + // chop off the suffix if provided + if (suffix) { + strstr(base, suffix)[0] = 0; + } + + puts(base); +}