diff --git a/client/DirectFB/dfreerdp.c b/client/DirectFB/dfreerdp.c index 16ef15efe..88714eb25 100644 --- a/client/DirectFB/dfreerdp.c +++ b/client/DirectFB/dfreerdp.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -361,6 +362,8 @@ int main(int argc, char* argv[]) struct thread_data* data; rdpChanMan* chanman; + setlocale(LC_ALL, ""); + freerdp_chanman_global_init(); g_sem = freerdp_sem_new(1); diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index 8c3e86be7..3fdc48592 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -522,6 +523,8 @@ int main(int argc, char* argv[]) struct thread_data* data; rdpChanMan* chanman; + setlocale(LC_ALL, ""); + freerdp_chanman_global_init(); g_sem = freerdp_sem_new(1); diff --git a/libfreerdp-utils/unicode.c b/libfreerdp-utils/unicode.c index 3d7b801f7..fb5150d1e 100644 --- a/libfreerdp-utils/unicode.c +++ b/libfreerdp-utils/unicode.c @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -187,13 +188,21 @@ char* freerdp_uniconv_out(UNICONV *uniconv, char *str, size_t *pout_len) void freerdp_uniconv_uppercase(UNICONV *uniconv, char *wstr, int length) { int i; - char* p; + unsigned char* p; + unsigned int wc, uwc; - p = wstr; + p = (unsigned char*)wstr; for (i = 0; i < length; i++) { - if (p[i * 2] >= 'a' && p[i * 2] <= 'z') - p[i * 2] = p[i * 2] - 32; + wc = (unsigned int)(*p); + wc += (unsigned int)(*(p + 1)) << 8; + uwc = towupper(wc); + if (uwc != wc) + { + *p = uwc & 0xFF; + *(p + 1) = (uwc >> 8) & 0xFF; + } + p += 2; } }