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