diff -urN src-original/gcc/gcc-4.2.1/intl/localename.c src-crystax/gcc/gcc-4.2.1/intl/localename.c
--- src-original/gcc/gcc-4.2.1/intl/localename.c	2010-03-09 04:55:16.000000000 +0300
+++ src-crystax/gcc/gcc-4.2.1/intl/localename.c	2010-05-21 03:07:40.497183004 +0400
@@ -393,6 +393,8 @@
      On some systems this can be done by the 'setlocale' function itself.  */
 # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
   retval = setlocale (category, NULL);
+  if (retval == NULL || retval[0] == '\0')
+    retval = "C";
 # else
   /* Setting of LC_ALL overwrites all other.  */
   retval = getenv ("LC_ALL");
diff -urN src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h
--- src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h	2010-03-09 04:55:30.000000000 +0300
+++ src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h	2010-05-21 03:08:22.232445252 +0400
@@ -65,6 +65,8 @@
 		   const char* __fmt, ...)
   {
     char* __old = std::setlocale(LC_NUMERIC, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (std::strcmp(__old, "C"))
       {
diff -urN src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h
--- src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h	2010-03-09 04:55:30.000000000 +0300
+++ src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h	2010-05-21 03:08:49.526182904 +0400
@@ -82,6 +82,8 @@
     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
 #else
     char* __old = std::setlocale(LC_ALL, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = new char[std::strlen(__old) + 1];
     std::strcpy(__sav, __old);
     std::setlocale(LC_ALL, "C");
diff -urN src-original/gcc/gcc-4.4.0/intl/localename.c src-crystax/gcc/gcc-4.4.0/intl/localename.c
--- src-original/gcc/gcc-4.4.0/intl/localename.c	2010-03-09 04:57:56.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/intl/localename.c	2010-05-21 02:54:59.944230116 +0400
@@ -393,6 +393,8 @@
      On some systems this can be done by the 'setlocale' function itself.  */
 # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
   retval = setlocale (category, NULL);
+  if (retval == NULL || retval[0] == '\0')
+    retval = "C";
 # else
   /* Setting of LC_ALL overwrites all other.  */
   retval = getenv ("LC_ALL");
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc	2010-05-21 03:00:08.707198714 +0400
@@ -51,6 +51,8 @@
     {
       // Assumes __s formatted for "C" locale.
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __len = strlen(__old) + 1;
       char* __sav = new char[__len];
       memcpy(__sav, __old, __len);
@@ -116,6 +118,8 @@
     {
       // Assumes __s formatted for "C" locale.
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __len = strlen(__old) + 1;
       char* __sav = new char[__len];
       memcpy(__sav, __old, __len);
@@ -161,6 +165,8 @@
     {
       // Assumes __s formatted for "C" locale.
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __len = strlen(__old) + 1;
       char* __sav = new char[__len];
       memcpy(__sav, __old, __len);
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h	2010-05-21 02:57:22.174379076 +0400
@@ -58,6 +58,8 @@
 		   const char* __fmt, ...)
   {
     char* __old = std::setlocale(LC_NUMERIC, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (__builtin_strcmp(__old, "C"))
       {
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc	2010-05-21 02:58:20.611722568 +0400
@@ -43,6 +43,8 @@
 	   const tm* __tm) const
     {
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __llen = strlen(__old) + 1;
       char* __sav = new char[__llen];
       memcpy(__sav, __old, __llen);
@@ -128,6 +130,8 @@
 	   const tm* __tm) const
     {
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __llen = strlen(__old) + 1;
       char* __sav = new char[__llen];
       memcpy(__sav, __old, __llen);
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h	2010-05-21 03:01:36.319307763 +0400
@@ -72,6 +72,8 @@
     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
 #else
     char* __old = std::setlocale(LC_NUMERIC, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (__builtin_strcmp(__old, "C"))
       {
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc	2010-05-21 03:03:36.778447756 +0400
@@ -45,6 +45,8 @@
       return string(__msg);
 #else
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __len = strlen(__old) + 1;
       char* __sav = new char[__len];
       memcpy(__sav, __old, __len);
@@ -68,6 +70,8 @@
       return _M_convert_from_char(__msg);
 # else
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __len = strlen(__old) + 1;
       char* __sav = new char[__len];
       memcpy(__sav, __old, __len);
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc	2010-05-21 03:01:04.282183669 +0400
@@ -428,6 +428,8 @@
 #else
 	  // Switch to named locale so that mbsrtowcs will work.
 	  char* __old = setlocale(LC_ALL, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
           const size_t __llen = strlen(__old) + 1;
           char* __sav = new char[__llen];
           memcpy(__sav, __old, __llen);
@@ -596,6 +598,8 @@
 #else
 	  // Switch to named locale so that mbsrtowcs will work.
 	  char* __old = setlocale(LC_ALL, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
           const size_t __llen = strlen(__old) + 1;
           char* __sav = new char[__llen];
           memcpy(__sav, __old, __llen);
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc	2010-05-21 03:02:54.836184301 +0400
@@ -46,6 +46,8 @@
 					_M_c_locale_timepunct);
 #else
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old == '\0')
+        __old = "C";
       const size_t __llen = strlen(__old) + 1;  
       char* __sav = new char[__llen];
       memcpy(__sav, __old, __llen);
@@ -202,6 +204,8 @@
 					_M_c_locale_timepunct);
 #else
       char* __old = setlocale(LC_ALL, NULL);
+      if (__old == NULL || __old[0] == '\0')
+        __old = "C";
       const size_t __llen = strlen(__old) + 1;
       char* __sav = new char[__llen];
       memcpy(__sav, __old, __llen);
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h	2010-05-21 03:04:51.184198547 +0400
@@ -45,6 +45,8 @@
   {
     const ctype_base::mask* __ret;
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (__builtin_strcmp(__old, "C"))
       {
@@ -87,6 +89,8 @@
   _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
   {
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (__builtin_strcmp(__old, "C"))
       {    
@@ -132,6 +136,8 @@
   _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
   {
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     char* __sav = NULL;
     if (__builtin_strcmp(__old, "C"))
       {
diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h
--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h	2010-03-09 04:58:41.000000000 +0300
+++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h	2010-05-21 03:06:05.894445080 +0400
@@ -38,6 +38,8 @@
   {
     const ctype_base::mask* __ret;
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     const size_t __len = __builtin_strlen(__old) + 1;
     char* __sav = new char[__len];
     __builtin_memcpy(__sav, __old, __len);
@@ -53,6 +55,8 @@
   : facet(__refs), _M_del(__table != 0 && __del)
   {
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     const size_t __len = __builtin_strlen(__old) + 1;
     char* __sav = new char[__len];
     __builtin_memcpy(__sav, __old, __len);
@@ -69,6 +73,8 @@
   : facet(__refs), _M_del(__table != 0 && __del)
   {
     char* __old = setlocale(LC_CTYPE, NULL);
+    if (__old == NULL || __old[0] == '\0')
+      __old = "C";
     const size_t __len = __builtin_strlen(__old) + 1;
     char* __sav = new char[__len];
     __builtin_memcpy(__sav, __old, __len);

