xref: /inferno-os/libkern/utfrune.c (revision 3cd4f1d15146c08f05206d6328ecbc1c7fdc8dfa)
1*3cd4f1d1SCharles Forsyth #include "lib9.h"
237da2899SCharles.Forsyth 
337da2899SCharles.Forsyth char*
utfrune(char * s,long c)437da2899SCharles.Forsyth utfrune(char *s, long c)
537da2899SCharles.Forsyth {
637da2899SCharles.Forsyth 	long c1;
737da2899SCharles.Forsyth 	Rune r;
837da2899SCharles.Forsyth 	int n;
937da2899SCharles.Forsyth 
1037da2899SCharles.Forsyth 	if(c < Runesync)		/* not part of utf sequence */
1137da2899SCharles.Forsyth 		return strchr(s, c);
1237da2899SCharles.Forsyth 
1337da2899SCharles.Forsyth 	for(;;) {
1437da2899SCharles.Forsyth 		c1 = *(uchar*)s;
1537da2899SCharles.Forsyth 		if(c1 < Runeself) {	/* one byte rune */
1637da2899SCharles.Forsyth 			if(c1 == 0)
1737da2899SCharles.Forsyth 				return 0;
1837da2899SCharles.Forsyth 			if(c1 == c)
1937da2899SCharles.Forsyth 				return s;
2037da2899SCharles.Forsyth 			s++;
2137da2899SCharles.Forsyth 			continue;
2237da2899SCharles.Forsyth 		}
2337da2899SCharles.Forsyth 		n = chartorune(&r, s);
2437da2899SCharles.Forsyth 		if(r == c)
2537da2899SCharles.Forsyth 			return s;
2637da2899SCharles.Forsyth 		s += n;
2737da2899SCharles.Forsyth 	}
2837da2899SCharles.Forsyth }
29