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