summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/basename/basename.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.bin/basename/basename.c b/usr.bin/basename/basename.c
index e22e5a6c4a2a..b6756ca2cdfe 100644
--- a/usr.bin/basename/basename.c
+++ b/usr.bin/basename/basename.c
@@ -71,10 +71,15 @@ main(argc, argv)
if (argc != 1 && argc != 2)
usage();
+ if (!*argv[0]) {
+ printf("\n");
+ exit(0);
+ }
if ((p = basename(argv[0])) == NULL)
err(1, "%s", argv[0]);
- if (*++argv && (q = strstr(p, *argv)) && strcmp(q, *argv) == 0)
- *q = '\0';
+ if (*++argv && (q = strchr(p, '\0') - strlen(*argv)) > p &&
+ strcmp(*argv, q) == 0)
+ *q = '\0';
(void)printf("%s\n", p);
exit(0);
}