diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2013-03-09 01:27:34 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-03-09 01:27:34 +0000 |
commit | e88c4f52a771a323dfad124e5f4836c2504a0905 (patch) | |
tree | de6d5048d13e2b59636273cc2f56ae33fd44403b /gcc-4.7 | |
parent | 0b98b2a6adcc38619dd07fcd1b6638b7795c24c3 (diff) | |
parent | d3029b5a1a770d75806370618f7311a991107119 (diff) | |
download | toolchain_gcc-e88c4f52a771a323dfad124e5f4836c2504a0905.tar.gz toolchain_gcc-e88c4f52a771a323dfad124e5f4836c2504a0905.tar.bz2 toolchain_gcc-e88c4f52a771a323dfad124e5f4836c2504a0905.zip |
Merge "More fix to handle NULL return value of setlocale() in libstdc++/GCC4.7"
Diffstat (limited to 'gcc-4.7')
-rw-r--r-- | gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.cc | 24 | ||||
-rw-r--r-- | gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc | 12 |
2 files changed, 24 insertions, 12 deletions
diff --git a/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.cc b/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.cc index a89c16fcb..783bf30ef 100644 --- a/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.cc +++ b/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.cc @@ -121,10 +121,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { // Assumes __s formatted for "C" locale. char* __old = setlocale(LC_ALL, 0); - const size_t __len = strlen(__old) + 1; - char* __sav = new char[__len]; - memcpy(__sav, __old, __len); - setlocale(LC_ALL, "C"); + char* __sav = 0; + if (__old) + { + const size_t __len = strlen(__old) + 1; + __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + } char* __sanity; #if !__DBL_HAS_INFINITY__ @@ -166,10 +170,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { // Assumes __s formatted for "C" locale. char* __old = setlocale(LC_ALL, 0); - const size_t __len = strlen(__old) + 1; - char* __sav = new char[__len]; - memcpy(__sav, __old, __len); - setlocale(LC_ALL, "C"); + char* __sav = 0; + if (__old) + { + const size_t __len = strlen(__old) + 1; + __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + } #if !__LDBL_HAS_INFINITY__ errno = 0; diff --git a/gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc b/gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc index a260904f0..724dd26b7 100644 --- a/gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc +++ b/gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc @@ -134,10 +134,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const tm* __tm) const throw() { char* __old = setlocale(LC_ALL, 0); - const size_t __llen = strlen(__old) + 1; - char* __sav = new char[__llen]; - memcpy(__sav, __old, __llen); - setlocale(LC_ALL, _M_name_timepunct); + char* __sav = 0; + if (__old) + { + const size_t __llen = strlen(__old) + 1; + __sav = new char[__llen]; + memcpy(__sav, __old, __llen); + setlocale(LC_ALL, _M_name_timepunct); + } const size_t __len = wcsftime(__s, __maxlen, __format, __tm); setlocale(LC_ALL, __sav); delete [] __sav; |