basename.c (605B)
1 #include <u.h> 2 #include <libc.h> 3 4 void 5 main(int argc, char *argv[]) 6 { 7 char *pr; 8 int n, dflag; 9 10 dflag = 0; 11 if(argc>1 && strcmp(argv[1], "-d") == 0){ 12 --argc; 13 ++argv; 14 dflag = 1; 15 } 16 if(argc < 2 || argc > 3){ 17 fprint(2, "usage: basename [-d] string [suffix]\n"); 18 exits("usage"); 19 } 20 pr = utfrrune(argv[1], '/'); 21 if(dflag){ 22 if(pr){ 23 *pr = 0; 24 print("%s\n", argv[1]); 25 exits(0); 26 } 27 print(".\n"); 28 exits(0); 29 } 30 if(pr) 31 pr++; 32 else 33 pr = argv[1]; 34 if(argc==3){ 35 n = strlen(pr)-strlen(argv[2]); 36 if(n >= 0 && !strcmp(pr+n, argv[2])) 37 pr[n] = 0; 38 } 39 print("%s\n", pr); 40 exits(0); 41 }