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