1*96cbc34fSDavid du Colombier #include <u.h> 2*96cbc34fSDavid du Colombier #include <libc.h> 3*96cbc34fSDavid du Colombier 4*96cbc34fSDavid du Colombier int wstrutflen(Rune * s)5*96cbc34fSDavid du Colombierwstrutflen(Rune *s) 6*96cbc34fSDavid du Colombier { 7*96cbc34fSDavid du Colombier int n; 8*96cbc34fSDavid du Colombier 9*96cbc34fSDavid du Colombier for(n=0; *s; n+=runelen(*s),s++) 10*96cbc34fSDavid du Colombier ; 11*96cbc34fSDavid du Colombier return n; 12*96cbc34fSDavid du Colombier } 13*96cbc34fSDavid du Colombier 14*96cbc34fSDavid du Colombier int wstrtoutf(char * s,Rune * t,int n)15*96cbc34fSDavid du Colombierwstrtoutf(char *s, Rune *t, int n) 16*96cbc34fSDavid du Colombier { 17*96cbc34fSDavid du Colombier int i; 18*96cbc34fSDavid du Colombier char *s0; 19*96cbc34fSDavid du Colombier 20*96cbc34fSDavid du Colombier s0 = s; 21*96cbc34fSDavid du Colombier if(n <= 0) 22*96cbc34fSDavid du Colombier return wstrutflen(t)+1; 23*96cbc34fSDavid du Colombier while(*t) { 24*96cbc34fSDavid du Colombier if(n < UTFmax+1 && n < runelen(*t)+1) { 25*96cbc34fSDavid du Colombier *s = 0; 26*96cbc34fSDavid du Colombier return i+wstrutflen(t)+1; 27*96cbc34fSDavid du Colombier } 28*96cbc34fSDavid du Colombier i = runetochar(s, t); 29*96cbc34fSDavid du Colombier s += i; 30*96cbc34fSDavid du Colombier n -= i; 31*96cbc34fSDavid du Colombier t++; 32*96cbc34fSDavid du Colombier } 33*96cbc34fSDavid du Colombier *s = 0; 34*96cbc34fSDavid du Colombier return s-s0; 35*96cbc34fSDavid du Colombier } 36