xref: /plan9/sys/src/libc/port/utfecpy.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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