xref: /plan9/sys/src/cmd/basename.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier void
main(int argc,char * argv[])53e12c5d1SDavid du Colombier main(int argc, char *argv[])
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 	char *pr;
8219b2ee8SDavid du Colombier 	int n, dflag;
93e12c5d1SDavid du Colombier 
10219b2ee8SDavid du Colombier 	dflag = 0;
11219b2ee8SDavid du Colombier 	if(argc>1 && strcmp(argv[1], "-d") == 0){
12219b2ee8SDavid du Colombier 		--argc;
13219b2ee8SDavid du Colombier 		++argv;
14219b2ee8SDavid du Colombier 		dflag = 1;
15219b2ee8SDavid du Colombier 	}
16*7dd7cddfSDavid du Colombier 	if(argc < 2 || argc > 3){
17219b2ee8SDavid du Colombier 		fprint(2, "usage: basename [-d] string [suffix]\n");
183e12c5d1SDavid du Colombier 		exits("usage");
193e12c5d1SDavid du Colombier 	}
203e12c5d1SDavid du Colombier 	pr = utfrrune(argv[1], '/');
21219b2ee8SDavid du Colombier 	if(dflag){
22219b2ee8SDavid du Colombier 		if(pr){
23219b2ee8SDavid du Colombier 			*pr = 0;
24219b2ee8SDavid du Colombier 			print("%s\n", argv[1]);
25219b2ee8SDavid du Colombier 			exits(0);
26219b2ee8SDavid du Colombier 		}
27219b2ee8SDavid du Colombier 		print(".\n");
28219b2ee8SDavid du Colombier 		exits(0);
29219b2ee8SDavid du Colombier 	}
30bd389b36SDavid du Colombier 	if(pr)
313e12c5d1SDavid du Colombier 		pr++;
32bd389b36SDavid du Colombier 	else
33bd389b36SDavid du Colombier 		pr = argv[1];
343e12c5d1SDavid du Colombier 	if(argc==3){
353e12c5d1SDavid du Colombier 		n = strlen(pr)-strlen(argv[2]);
36bd389b36SDavid du Colombier 		if(n >= 0 && !strcmp(pr+n, argv[2]))
373e12c5d1SDavid du Colombier 			pr[n] = 0;
383e12c5d1SDavid du Colombier 	}
393e12c5d1SDavid du Colombier 	print("%s\n", pr);
403e12c5d1SDavid du Colombier 	exits(0);
413e12c5d1SDavid du Colombier }
42