OSDN Git Service

* syscalls.cc (internal_setlocale): Use UTF-8 internally if external
authorcorinna <corinna>
Sun, 17 Jan 2010 09:41:00 +0000 (09:41 +0000)
committercorinna <corinna>
Sun, 17 Jan 2010 09:41:00 +0000 (09:41 +0000)
charset is ASCII.

winsup/cygwin/ChangeLog
winsup/cygwin/syscalls.cc

index 1e05126..e9d961a 100644 (file)
@@ -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.
index fb39a5d..6adb941 100644 (file)
@@ -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);