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