1 #include <stdlib.h> 2 #include <string.h> 3 #include <stdio.h> 4 5 void 6 main(int argc, char **argv) 7 { 8 char *f, *b, *s; 9 int n; 10 11 if(argc < 2 || argc > 3){ 12 fprintf(stderr, "Usage: basename string [suffix]\n"); 13 exit(1); 14 } 15 s = argv[1]; 16 b = s + strlen(s) - 1; 17 while(b > s && *b == '/') 18 b--; 19 *++b = 0; 20 if(b == s+1 && s[0] == '/') { 21 printf("/"); 22 exit(0); 23 } 24 /* now b is after last char of string, trailing slashes removed */ 25 26 for(f = b; f >= s; f--) 27 if(*f == '/'){ 28 f++; 29 break; 30 } 31 if(f < s) 32 f = s; 33 34 /* now f is first char after last remaining slash, or first char */ 35 36 if(argc == 3){ 37 n = strlen(argv[2]); 38 if(n < b-f && strncmp(b-n, argv[2], n) == 0){ 39 b -= n; 40 *b = 0; 41 } 42 } 43 printf("%s\n", f); 44 exit(0); 45 } 46