diff --git a/src/Win/CodePage.cpp b/src/Win/CodePage.cpp index bce5faf..6e488b0 100644 --- a/src/Win/CodePage.cpp +++ b/src/Win/CodePage.cpp @@ -4,6 +4,17 @@ namespace hgl { + int get_utf16_length(const CharSet &cs,const void *src,const int src_size) + { + const int src_str_size=(src_size==-1)?strlen((char *)src):src_size; + + const int len=MultiByteToWideChar((UINT)cs.codepage,0,(char *)src,src_str_size,0,0); + + if(len<=0)return(len); + + return len; + } + int to_utf16(const CharSet &cs,u16char **dst,const void *src,const int src_size) { const int src_str_size=(src_size==-1)?strlen((char *)src):src_size; @@ -12,9 +23,26 @@ namespace hgl if(len<=0)return(len); - *dst=new u16char[len]; + *dst=new u16char[len+1]; - return MultiByteToWideChar((UINT)cs.codepage,0,(char *)src,src_str_size,*dst,len); + MultiByteToWideChar((UINT)cs.codepage,0,(char *)src,src_str_size,*dst,len); + *dst[len]=0; + + return len; + } + + int to_utf16(const CharSet &cs,u16char *dst,const int dst_size,const void *src,const int src_size) + { + if(dst_size<=0)return dst_size; + + const int src_str_size=(src_size==-1)?strlen((char *)src):src_size; + + int len=MultiByteToWideChar((UINT)cs.codepage,0,(char *)src,src_str_size,dst,dst_size); + + if(len