X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Fconfig%2Flocale%2Fgnu%2Fc_locale.h;h=67ecb7d13c74d1181e3ba4ffb7fc0ac6492f3a57;hb=9d76f4a0c94835d85d5f8ed0b45b1f33d6827599;hp=fae7ffec59aca0a00447f281cb4edda85af2736d;hpb=b592d014a21df9eacdf55fe9efe8fd07428184f0;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h index fae7ffec59a..67ecb7d13c7 100644 --- a/libstdc++-v3/config/locale/gnu/c_locale.h +++ b/libstdc++-v3/config/locale/gnu/c_locale.h @@ -45,7 +45,6 @@ #pragma GCC system_header #include -#include #include #define _GLIBCXX_C_LOCALE_GNU 1 @@ -77,15 +76,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) __c_locale __old = __gnu_cxx::__uselocale(__cloc); #else - char* __old = std::setlocale(LC_ALL, NULL); - const size_t __len = __builtin_strlen(__old) + 1; - char* __sav = new char[__len]; - __builtin_memcpy(__sav, __old, __len); - std::setlocale(LC_ALL, "C"); + char* __old = std::setlocale(LC_NUMERIC, NULL); + char* __sav = NULL; + if (__builtin_strcmp(__old, "C")) + { + const size_t __len = __builtin_strlen(__old) + 1; + char* __sav = new char[__len]; + __builtin_memcpy(__sav, __old, __len); + std::setlocale(LC_NUMERIC, "C"); + } #endif - va_list __args; - va_start(__args, __fmt); + __builtin_va_list __args; + __builtin_va_start(__args, __fmt); #ifdef _GLIBCXX_USE_C99 const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); @@ -93,13 +96,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const int __ret = __builtin_vsprintf(__out, __fmt, __args); #endif - va_end(__args); + __builtin_va_end(__args); #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) __gnu_cxx::__uselocale(__old); #else - std::setlocale(LC_ALL, __sav); - delete [] __sav; + if (__sav) + { + std::setlocale(LC_NUMERIC, __sav); + delete [] __sav; + } #endif return __ret; }