utfrrune.c 403 B

123456789101112131415161718192021222324252627282930
  1. #include <u.h>
  2. #include <libc.h>
  3. char*
  4. utfrrune(char *s, long c)
  5. {
  6. long c1;
  7. Rune r;
  8. char *s1;
  9. if(c < Runesync) /* not part of utf sequence */
  10. return strrchr(s, c);
  11. s1 = 0;
  12. for(;;) {
  13. c1 = *(uchar*)s;
  14. if(c1 < Runeself) { /* one byte rune */
  15. if(c1 == 0)
  16. return s1;
  17. if(c1 == c)
  18. s1 = s;
  19. s++;
  20. continue;
  21. }
  22. c1 = chartorune(&r, s);
  23. if(r == c)
  24. s1 = s;
  25. s += c1;
  26. }
  27. }