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