1*e72f3952SAlexander Dorokhine /*
2*e72f3952SAlexander Dorokhine * The authors of this software are Rob Pike and Ken Thompson.
3*e72f3952SAlexander Dorokhine * Copyright (c) 2002 by Lucent Technologies.
4*e72f3952SAlexander Dorokhine * Permission to use, copy, modify, and distribute this software for any
5*e72f3952SAlexander Dorokhine * purpose without fee is hereby granted, provided that this entire notice
6*e72f3952SAlexander Dorokhine * is included in all copies of any software which is or includes a copy
7*e72f3952SAlexander Dorokhine * or modification of this software and in all copies of the supporting
8*e72f3952SAlexander Dorokhine * documentation for such software.
9*e72f3952SAlexander Dorokhine * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
10*e72f3952SAlexander Dorokhine * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
11*e72f3952SAlexander Dorokhine * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
12*e72f3952SAlexander Dorokhine * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
13*e72f3952SAlexander Dorokhine */
14*e72f3952SAlexander Dorokhine #include <stdarg.h>
15*e72f3952SAlexander Dorokhine #include <string.h>
16*e72f3952SAlexander Dorokhine #include "utf.h"
17*e72f3952SAlexander Dorokhine #include "utfdef.h"
18*e72f3952SAlexander Dorokhine
19*e72f3952SAlexander Dorokhine char*
utfecpy(char * to,char * e,const char * from)20*e72f3952SAlexander Dorokhine utfecpy(char *to, char *e, const char *from)
21*e72f3952SAlexander Dorokhine {
22*e72f3952SAlexander Dorokhine char *end;
23*e72f3952SAlexander Dorokhine
24*e72f3952SAlexander Dorokhine if(to >= e)
25*e72f3952SAlexander Dorokhine return to;
26*e72f3952SAlexander Dorokhine end = (char*)memccpy(to, from, '\0', e - to);
27*e72f3952SAlexander Dorokhine if(end == nil){
28*e72f3952SAlexander Dorokhine end = e-1;
29*e72f3952SAlexander Dorokhine while(end>to && (*--end&0xC0)==0x80)
30*e72f3952SAlexander Dorokhine ;
31*e72f3952SAlexander Dorokhine *end = '\0';
32*e72f3952SAlexander Dorokhine }else{
33*e72f3952SAlexander Dorokhine end--;
34*e72f3952SAlexander Dorokhine }
35*e72f3952SAlexander Dorokhine return end;
36*e72f3952SAlexander Dorokhine }
37