diff options
Diffstat (limited to 'toys')
-rw-r--r-- | toys/Config.in | 4 | ||||
-rw-r--r-- | toys/basename.c | 18 |
2 files changed, 13 insertions, 9 deletions
diff --git a/toys/Config.in b/toys/Config.in index 34c31107..e387d245 100644 --- a/toys/Config.in +++ b/toys/Config.in @@ -15,9 +15,9 @@ config BASENAME bool "basename" default y help - usage: basename path + usage: basename path [suffix] - Print the part of path after the last slash. + Print the part of path after the last slash, optionally minus suffix. config BZCAT bool "bzcat" diff --git a/toys/basename.c b/toys/basename.c index 2ea6882c..da843b86 100644 --- a/toys/basename.c +++ b/toys/basename.c @@ -1,14 +1,18 @@ +/* vi: set sw=4 ts=4: */ +/* basename.c - print non-directory portion of path + * + * See http://www.opengroup.org/onlinepubs/009695399/utilities/basename.html + */ + #include "toys.h" int basename_main(void) { - char *name = basename(toys.optargs[0]); - if (toys.optargs[1]) { - int slen = strlen(toys.optargs[1]); - int name_len = strlen(name); - if (slen < name_len) - if (!strcmp(name+name_len-slen, toys.optargs[1])) - *(name+name_len-slen) = '\0'; + char *name = basename(*toys.optargs); + char *suffix = toys.optargs[1]; + if (suffix) { + char *end = name+strlen(name)-strlen(suffix); + if (end>name && !strcmp(end,suffix)) *end=0; } puts(name); return 0; |