xref: /inferno-os/lib9/utfnlen.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth int
utfnlen(char * s,long m)4*37da2899SCharles.Forsyth utfnlen(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