xref: /plan9-contrib/sys/src/ape/cmd/dirname.c (revision d9306527b4a7229dcf0cf3c58aed36bb9da82854)
1219b2ee8SDavid du Colombier #include <stdlib.h>
2219b2ee8SDavid du Colombier #include <string.h>
3219b2ee8SDavid du Colombier #include <stdio.h>
4219b2ee8SDavid du Colombier 
main(int argc,char ** argv)5219b2ee8SDavid du Colombier main(int argc, char **argv)
6219b2ee8SDavid du Colombier {
7219b2ee8SDavid du Colombier 	char *f, *s;
8219b2ee8SDavid du Colombier 	int n;
9219b2ee8SDavid du Colombier 
10219b2ee8SDavid du Colombier 	if(argc != 2){
11219b2ee8SDavid du Colombier 		fprintf(stderr, "Usage: dirname string\n");
12219b2ee8SDavid du Colombier 		exit(1);
13219b2ee8SDavid du Colombier 	}
14219b2ee8SDavid du Colombier 	s = argv[1];
15219b2ee8SDavid du Colombier 	f = s + strlen(s) - 1;
16219b2ee8SDavid du Colombier 	while(f > s && *f == '/')
17219b2ee8SDavid du Colombier 		f--;
18219b2ee8SDavid du Colombier 	*++f = 0;
19219b2ee8SDavid du Colombier 	/* now f is after last char of string, trailing slashes removed */
20219b2ee8SDavid du Colombier 
21219b2ee8SDavid du Colombier 	for(; f >= s; f--)
22219b2ee8SDavid du Colombier 		if(*f == '/'){
23219b2ee8SDavid du Colombier 			f++;
24219b2ee8SDavid du Colombier 			break;
25219b2ee8SDavid du Colombier 		}
26219b2ee8SDavid du Colombier 	if(f < s) {
27219b2ee8SDavid du Colombier 		*s = '.';
28219b2ee8SDavid du Colombier 		s[1] = 0;
29219b2ee8SDavid du Colombier 	} else {
30219b2ee8SDavid du Colombier 		--f;
31219b2ee8SDavid du Colombier 		while(f > s && *f == '/')
32219b2ee8SDavid du Colombier 			f--;
33219b2ee8SDavid du Colombier 		f[1] = 0;
34219b2ee8SDavid du Colombier 	}
35219b2ee8SDavid du Colombier 
36219b2ee8SDavid du Colombier 	printf("%s\n", s);
37*d9306527SDavid du Colombier 	return 0;
38219b2ee8SDavid du Colombier }
39