diff options
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 12 |
2 files changed, 15 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1e0512614..e9d961a7c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2010-01-17 Corinna Vinschen <corinna@vinschen.de> + + * syscalls.cc (internal_setlocale): Use UTF-8 internally if external + charset is ASCII. + 2010-01-15 Corinna Vinschen <corinna@vinschen.de> * libc/fnmatch.c: Replace with multibyte capable version from FreeBSD. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index fb39a5d77..6adb941ad 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); |