diff --git a/README b/README index dd3d727..6a1594d 100644 --- a/README +++ b/README @@ -7,9 +7,9 @@ across UNIX and UNIX-like systems. The following tools are implemented ('*' == finished, '#' == UTF-8 support, '=' == implicit UTF-8 support, '|' == audited): - UTILITY POSIX 2008 COMPLIANT MISSING OPTIONS - ------- -------------------- --------------- -=* basename yes none + UTILITY POSIX 2008 COMPLIANT MISSING OPTIONS + ------- -------------------- --------------- +=*| basename yes none =* cal yes none =* cat yes none =* chgrp yes none diff --git a/basename.c b/basename.c index fb30d0b..181fc8e 100644 --- a/basename.c +++ b/basename.c @@ -5,8 +5,6 @@ #include "util.h" -static void usage(void); - void usage(void) { @@ -16,25 +14,24 @@ usage(void) int main(int argc, char *argv[]) { + ssize_t off; char *p; - size_t off; ARGBEGIN { default: usage(); } ARGEND; - if (argc < 1) + if (argc != 1 && argc != 2) usage(); - p = strlen(argv[0]) ? basename(argv[0]) : "."; - if (argc == 2 && *p != '/') { - if (strlen(argv[1]) < strlen(p)) { - off = strlen(p) - strlen(argv[1]); - if (strcmp(&p[off], argv[1]) == 0) - p[off] = '\0'; - } + p = basename(argv[0]); + if (argc == 2) { + off = strlen(p) - strlen(argv[1]); + if (off > 0 && !strcmp(p + off, argv[1])) + p[off] = '\0'; } puts(p); + return 0; }