summaryrefslogtreecommitdiffstats
path: root/usr.bin/basename/basename.c
diff options
context:
space:
mode:
authorjmallett <jmallett@FreeBSD.org>2002-06-30 13:40:35 +0000
committerjmallett <jmallett@FreeBSD.org>2002-06-30 13:40:35 +0000
commitdc7f65410ff9df200f41246fd70bf688b32408d5 (patch)
treeee6617dcfe8bf547be6de46033e48aebab30f9d7 /usr.bin/basename/basename.c
parent954ff8bf68f6fa0ade446e2c42c885d7e3068aa8 (diff)
downloadFreeBSD-src-dc7f65410ff9df200f41246fd70bf688b32408d5.zip
FreeBSD-src-dc7f65410ff9df200f41246fd70bf688b32408d5.tar.gz
Make it possible to have this (basename(1)) perform basename(3) on multiple
files. The traditional behaviour, 'basename string .suffix', is preserved, however a suffix may now also be specified via a getopt(3) option, -s, such that if it is specified in that way, all string arguments follow. There is also a new flag, -a, which allows a user to say "yes, please basename(3) on all arguments". Update manual to reflect this unobtrusively. Reviewed by: obrien
Diffstat (limited to 'usr.bin/basename/basename.c')
-rw-r--r--usr.bin/basename/basename.c40
1 files changed, 32 insertions, 8 deletions
diff --git a/usr.bin/basename/basename.c b/usr.bin/basename/basename.c
index 6d7a873..9650bdb 100644
--- a/usr.bin/basename/basename.c
+++ b/usr.bin/basename/basename.c
@@ -61,11 +61,22 @@ main(argc, argv)
int argc;
char **argv;
{
- char *p, *q;
- int ch;
+ char *p, *q, *suffix;
+ size_t suffixlen;
+ int aflag, ch;
- while ((ch = getopt(argc, argv, "")) != -1)
+ aflag = 0;
+ suffix = NULL;
+ suffixlen = 0;
+
+ while ((ch = getopt(argc, argv, "as:")) != -1)
switch(ch) {
+ case 'a':
+ aflag = 1;
+ break;
+ case 's':
+ suffix = optarg;
+ break;
case '?':
default:
usage();
@@ -73,7 +84,7 @@ main(argc, argv)
argc -= optind;
argv += optind;
- if (argc != 1 && argc != 2)
+ if (argc < 1)
usage();
if (!*argv[0]) {
@@ -82,10 +93,21 @@ main(argc, argv)
}
if ((p = basename(argv[0])) == NULL)
err(1, "%s", argv[0]);
- if (*++argv && (q = strchr(p, '\0') - strlen(*argv)) > p &&
- strcmp(*argv, q) == 0)
+ if ((suffix == NULL && !aflag) && argc == 2) {
+ suffix = argv[1];
+ argc--;
+ }
+ if (suffix != NULL)
+ suffixlen = strlen(suffix);
+ while (argc--) {
+ if ((p = basename(*argv)) == NULL)
+ err(1, "%s", argv[0]);
+ if (suffixlen && (q = strchr(p, '\0') - suffixlen) > p &&
+ strcmp(suffix, q) == 0)
*q = '\0';
- (void)printf("%s\n", p);
+ argv++;
+ (void)printf("%s\n", p);
+ }
exit(0);
}
@@ -93,6 +115,8 @@ void
usage()
{
- (void)fprintf(stderr, "usage: basename string [suffix]\n");
+ (void)fprintf(stderr,
+"usage: basename string [suffix]\n"
+" basename [-a] [-s suffix] string [...]\n");
exit(1);
}
OpenPOWER on IntegriCloud