int n;
char *utf8;
n=WideCharToMultiByte(CP_UTF8,0,utf16,len,NULL,0,NULL,NULL);
- if (n)
+ if (n || !len)
{
- utf8=malloc(n);
+ utf8=malloc(len<0?n:n+1);
if (utf8)
+ {
WideCharToMultiByte(CP_UTF8,0,utf16,len,utf8,n,NULL,NULL);
+ if (len>=0)
+ utf8[n]=0;
+ }
}
else
utf8=NULL;
int n;
WCHAR *utf16;
n=MultiByteToWideChar(CP_UTF8,0,utf8,len,NULL,0);
- if (n)
+ if (n || !len)
{
- utf16=malloc(n*sizeof(WCHAR));
+ utf16=malloc((len<0?n:n+1)*sizeof(WCHAR));
if (utf16)
+ {
MultiByteToWideChar(CP_UTF8,0,utf8,len,utf16,n);
+ if (len>=0)
+ utf16[n]=0;
+ }
}
else
utf16=NULL;