getfields.c 516 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <u.h>
  2. #include <libc.h>
  3. int
  4. getfields(char *str, char **args, int max, int mflag, char *set)
  5. {
  6. Rune r;
  7. int nr, intok, narg;
  8. if(max <= 0)
  9. return 0;
  10. narg = 0;
  11. args[narg] = str;
  12. if(!mflag)
  13. narg++;
  14. intok = 0;
  15. for(;; str += nr) {
  16. nr = chartorune(&r, str);
  17. if(r == 0)
  18. break;
  19. if(utfrune(set, r)) {
  20. if(narg >= max)
  21. break;
  22. *str = 0;
  23. intok = 0;
  24. args[narg] = str + nr;
  25. if(!mflag)
  26. narg++;
  27. } else {
  28. if(!intok && mflag)
  29. narg++;
  30. intok = 1;
  31. }
  32. }
  33. return narg;
  34. }