1*9a747e4fSDavid du Colombier #include <u.h> 2*9a747e4fSDavid du Colombier #include <libc.h> 3*9a747e4fSDavid du Colombier 4*9a747e4fSDavid du Colombier char* 5*9a747e4fSDavid du Colombier utfecpy(char *to, char *e, char *from) 6*9a747e4fSDavid du Colombier { 7*9a747e4fSDavid du Colombier char *end; 8*9a747e4fSDavid du Colombier 9*9a747e4fSDavid du Colombier if(to >= e) 10*9a747e4fSDavid du Colombier return to; 11*9a747e4fSDavid du Colombier end = memccpy(to, from, '\0', e - to); 12*9a747e4fSDavid du Colombier if(end == nil){ 13*9a747e4fSDavid du Colombier end = e-1; 14*9a747e4fSDavid du Colombier while(end>to && (*--end&0xC0)==0x80) 15*9a747e4fSDavid du Colombier ; 16*9a747e4fSDavid du Colombier *end = '\0'; 17*9a747e4fSDavid du Colombier }else{ 18*9a747e4fSDavid du Colombier end--; 19*9a747e4fSDavid du Colombier } 20*9a747e4fSDavid du Colombier return end; 21*9a747e4fSDavid du Colombier } 22