basename.c 605 B

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