From: Tryn Mirell Date: Mon, 16 Jan 2012 05:20:06 +0000 (-0600) Subject: Initial 'basename' implementation X-Git-Tag: 0.2.0~48 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=de584eb24173d6b708170ee1900fcec47091365e;p=platform%2Fupstream%2Ftoybox.git Initial 'basename' implementation --- diff --git a/toys/basename.c b/toys/basename.c new file mode 100644 index 0000000..3330732 --- /dev/null +++ b/toys/basename.c @@ -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); +}