From 643b326adcf74c41876d3cb3ccdc3209d3f79b27 Mon Sep 17 00:00:00 2001 From: corinna Date: Sun, 17 Jan 2010 18:41:00 +0000 Subject: [PATCH] * syscalls.cc (internal_setlocale): Use UTF-8 internally if external charset is ASCII. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/syscalls.cc | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1e0512614b..e9d961a7c9 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2010-01-17 Corinna Vinschen + + * syscalls.cc (internal_setlocale): Use UTF-8 internally if external + charset is ASCII. + 2010-01-15 Corinna Vinschen * libc/fnmatch.c: Replace with multibyte capable version from FreeBSD. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index fb39a5d776..6adb941ad0 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -4348,8 +4348,16 @@ internal_setlocale () cwdstuff::cwd_lock.acquire (); sys_mbstowcs (w_cwd, 32768, cygheap->cwd.get_posix ()); /* Set charset for internal conversion functions. */ - cygheap->locale.mbtowc = __mbtowc; - cygheap->locale.wctomb = __wctomb; + if (*__locale_charset () == 'A'/*SCII*/) + { + cygheap->locale.mbtowc = __utf8_mbtowc; + cygheap->locale.wctomb = __utf8_wctomb; + } + else + { + cygheap->locale.mbtowc = __mbtowc; + cygheap->locale.wctomb = __wctomb; + } strcpy (cygheap->locale.charset, __locale_charset ()); /* Restore CWD and PATH in new charset. */ cygheap->cwd.reset_posix (w_cwd); -- 2.11.0