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