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)
|
if (X11_clipboard != NULL)
|
||||||
{
|
{
|
||||||
char * tmp = X11_clipboard;
|
char * utf8_str = X11_clipboard;
|
||||||
X11_clipboard = NULL;
|
X11_clipboard = NULL;
|
||||||
// TODO : UTF8 -> UTF16 conversion
|
// UTF8 -> UTF16 and UTF8 -> ANSI conversions
|
||||||
return tmp;
|
#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;
|
return NULL;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user