OSDN Git Service

* dcrt0.cc (dll_crt0_1): Reset locale to "C" at the last moment before
authorcorinna <corinna>
Thu, 14 Jan 2010 18:56:23 +0000 (18:56 +0000)
committercorinna <corinna>
Thu, 14 Jan 2010 18:56:23 +0000 (18:56 +0000)
calling the application's main.
* syscalls.cc (internal_setlocale): Don't reset locale to "C here.
Change comment accordingly.

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

index 438de2d..142044f 100644 (file)
@@ -1,5 +1,12 @@
 2010-01-14  Corinna Vinschen  <corinna@vinschen.de>
 
+       * dcrt0.cc (dll_crt0_1): Reset locale to "C" at the last moment before
+       calling the application's main.
+       * syscalls.cc (internal_setlocale): Don't reset locale to "C here.
+       Change comment accordingly.
+
+2010-01-14  Corinna Vinschen  <corinna@vinschen.de>
+
        * cygwin.din (dup3): Export.
        (pipe2): Export.
        * dtable.cc (dtable::dup_worker): Take additional flags parameter.
index 663b9f9..f1f904a 100644 (file)
@@ -940,6 +940,8 @@ dll_crt0_1 (void *)
      do this for noncygwin case since the signal thread is blocked due to
      LoadLibrary serialization. */
   ld_preload ();
+  /* Per POSIX set the default application locale back to "C". */
+  _setlocale_r (_REENT, LC_CTYPE, "C");
   if (user_data->main)
     cygwin_exit (user_data->main (__argc, __argv, *user_data->envptr));
   __asm__ ("                           \n\
index bd3308a..fb39a5d 100644 (file)
@@ -4362,10 +4362,11 @@ internal_setlocale ()
     }
 }
 
-/* Called from dll_crt0_1, before calling the application's main().
+/* Called from dll_crt0_1, before fetching the command line from Windows.
    Set the internal charset according to the environment locale settings.
    Check if a required codepage is available, and only switch internal
-   charset if so.  Afterwards, reset application locale to "C" per POSIX. */
+   charset if so.
+   Make sure to reset the application locale to "C" per POSIX. */
 void
 initial_setlocale ()
 {
@@ -4373,7 +4374,6 @@ initial_setlocale ()
   if (ret && check_codepage (ret)
       && strcmp (cygheap->locale.charset, __locale_charset ()) != 0)
     internal_setlocale ();
-  _setlocale_r (_REENT, LC_CTYPE, "C");
 }
 
 /* Like newlib's setlocale, but additionally check if the charset needs