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