xref: /plan9/sys/src/cmd/basename.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier void
53e12c5d1SDavid du Colombier main(int argc, char *argv[])
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 	char *pr;
8*219b2ee8SDavid du Colombier 	int n, dflag;
93e12c5d1SDavid du Colombier 
10*219b2ee8SDavid du Colombier 	dflag = 0;
11*219b2ee8SDavid du Colombier 	if(argc>1 && strcmp(argv[1], "-d") == 0){
12*219b2ee8SDavid du Colombier 		--argc;
13*219b2ee8SDavid du Colombier 		++argv;
14*219b2ee8SDavid du Colombier 		dflag = 1;
15*219b2ee8SDavid du Colombier 	}
163e12c5d1SDavid du Colombier 	if(argc < 2){
17*219b2ee8SDavid 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], '/');
21*219b2ee8SDavid du Colombier 	if(dflag){
22*219b2ee8SDavid du Colombier 		if(pr){
23*219b2ee8SDavid du Colombier 			*pr = 0;
24*219b2ee8SDavid du Colombier 			print("%s\n", argv[1]);
25*219b2ee8SDavid du Colombier 			exits(0);
26*219b2ee8SDavid du Colombier 		}
27*219b2ee8SDavid du Colombier 		print(".\n");
28*219b2ee8SDavid du Colombier 		exits(0);
29*219b2ee8SDavid 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