xref: /plan9-contrib/sys/src/ape/cmd/dirname.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <stdlib.h>
2*219b2ee8SDavid du Colombier #include <string.h>
3*219b2ee8SDavid du Colombier #include <stdio.h>
4*219b2ee8SDavid du Colombier 
5*219b2ee8SDavid du Colombier main(int argc, char **argv)
6*219b2ee8SDavid du Colombier {
7*219b2ee8SDavid du Colombier 	char *f, *s;
8*219b2ee8SDavid du Colombier 	int n;
9*219b2ee8SDavid du Colombier 
10*219b2ee8SDavid du Colombier 	if(argc != 2){
11*219b2ee8SDavid du Colombier 		fprintf(stderr, "Usage: dirname string\n");
12*219b2ee8SDavid du Colombier 		exit(1);
13*219b2ee8SDavid du Colombier 	}
14*219b2ee8SDavid du Colombier 	s = argv[1];
15*219b2ee8SDavid du Colombier 	f = s + strlen(s) - 1;
16*219b2ee8SDavid du Colombier 	while(f > s && *f == '/')
17*219b2ee8SDavid du Colombier 		f--;
18*219b2ee8SDavid du Colombier 	*++f = 0;
19*219b2ee8SDavid du Colombier 	/* now f is after last char of string, trailing slashes removed */
20*219b2ee8SDavid du Colombier 
21*219b2ee8SDavid du Colombier 	for(; f >= s; f--)
22*219b2ee8SDavid du Colombier 		if(*f == '/'){
23*219b2ee8SDavid du Colombier 			f++;
24*219b2ee8SDavid du Colombier 			break;
25*219b2ee8SDavid du Colombier 		}
26*219b2ee8SDavid du Colombier 	if(f < s) {
27*219b2ee8SDavid du Colombier 		*s = '.';
28*219b2ee8SDavid du Colombier 		s[1] = 0;
29*219b2ee8SDavid du Colombier 	} else {
30*219b2ee8SDavid du Colombier 		--f;
31*219b2ee8SDavid du Colombier 		while(f > s && *f == '/')
32*219b2ee8SDavid du Colombier 			f--;
33*219b2ee8SDavid du Colombier 		f[1] = 0;
34*219b2ee8SDavid du Colombier 	}
35*219b2ee8SDavid du Colombier 
36*219b2ee8SDavid du Colombier 	printf("%s\n", s);
37*219b2ee8SDavid du Colombier }
38