X11 paste : proper charset conversion
Signed-off-by: Thomas Bernard <miniupnp@free.fr>
This commit is contained in:
parent
b67e264026
commit
d455f8ab93
@ -428,10 +428,63 @@ bye:
|
||||
}
|
||||
if (X11_clipboard != NULL)
|
||||
{
|
||||
char * tmp = X11_clipboard;
|
||||
char * utf8_str = X11_clipboard;
|
||||
X11_clipboard = NULL;
|
||||
// TODO : UTF8 -> UTF16 conversion
|
||||
return tmp;
|
||||
// UTF8 -> UTF16 and UTF8 -> ANSI conversions
|
||||
#if defined(ENABLE_FILENAMES_ICONV)
|
||||
if (unicode != NULL)
|
||||
{
|
||||
char * input = utf8_str;
|
||||
size_t inbytesleft = strlen(utf8_str);
|
||||
char * output;
|
||||
size_t outbytesleft;
|
||||
size_t r;
|
||||
*unicode = (word *)malloc(2 * inbytesleft + 2);
|
||||
if (*unicode != NULL)
|
||||
{
|
||||
output = (char *)*unicode;
|
||||
outbytesleft = 2 * inbytesleft;
|
||||
r = iconv(cd_utf16, &input, &inbytesleft, &output, &outbytesleft);
|
||||
if (r != (size_t)-1)
|
||||
{
|
||||
output[1] = output[0] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning("Unicode conversion of clipboard text failed");
|
||||
free(*unicode);
|
||||
*unicode = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
char * ansi_str;
|
||||
char * input = utf8_str;
|
||||
size_t inbytesleft = strlen(utf8_str);
|
||||
char * output;
|
||||
size_t outbytesleft;
|
||||
size_t r;
|
||||
ansi_str = (char *)malloc(inbytesleft + 1);
|
||||
if (ansi_str != NULL)
|
||||
{
|
||||
output = ansi_str;
|
||||
outbytesleft = inbytesleft;
|
||||
r = iconv(cd, &input, &inbytesleft, &output, &outbytesleft);
|
||||
if (r != (size_t)-1)
|
||||
{
|
||||
*output = '\0';
|
||||
free(utf8_str);
|
||||
return ansi_str;
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning("ANSI conversion of clipboard text failed");
|
||||
free(ansi_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return utf8_str;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user