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