Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2010-01-14 21:56:24 +0300
committerCorinna Vinschen <corinna@vinschen.de>2010-01-14 21:56:24 +0300
commit41d184bb62b3960530c93a98a876eb2896f98d7b (patch)
tree03d1404d9c3780958d655edbd9b6469b77f999a1 /winsup/cygwin
parent37671b5114b5b3614580a5cf1308d3c2e38bd8d3 (diff)
* 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.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/dcrt0.cc2
-rw-r--r--winsup/cygwin/syscalls.cc6
3 files changed, 12 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 438de2dde..142044f2c 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 663b9f93d..f1f904ac7 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -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\
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index bd3308a42..fb39a5d77 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -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