1*8ccd4a63SDavid du Colombier #include <u.h> 2*8ccd4a63SDavid du Colombier #include <libc.h> 3*8ccd4a63SDavid du Colombier 4*8ccd4a63SDavid du Colombier int utfnlen(char * s,long m)5*8ccd4a63SDavid du Colombierutfnlen(char *s, long m) 6*8ccd4a63SDavid du Colombier { 7*8ccd4a63SDavid du Colombier int c; 8*8ccd4a63SDavid du Colombier long n; 9*8ccd4a63SDavid du Colombier Rune rune; 10*8ccd4a63SDavid du Colombier char *es; 11*8ccd4a63SDavid du Colombier 12*8ccd4a63SDavid du Colombier es = s + m; 13*8ccd4a63SDavid du Colombier for(n = 0; s < es; n++) { 14*8ccd4a63SDavid du Colombier c = *(uchar*)s; 15*8ccd4a63SDavid du Colombier if(c < Runeself){ 16*8ccd4a63SDavid du Colombier if(c == '\0') 17*8ccd4a63SDavid du Colombier break; 18*8ccd4a63SDavid du Colombier s++; 19*8ccd4a63SDavid du Colombier continue; 20*8ccd4a63SDavid du Colombier } 21*8ccd4a63SDavid du Colombier if(!fullrune(s, es-s)) 22*8ccd4a63SDavid du Colombier break; 23*8ccd4a63SDavid du Colombier s += chartorune(&rune, s); 24*8ccd4a63SDavid du Colombier } 25*8ccd4a63SDavid du Colombier return n; 26*8ccd4a63SDavid du Colombier } 27