diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2012-10-30 21:57:26 -0700 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2012-10-30 21:57:27 -0700 |
commit | 0c894ee0a8500ee8efcef29c262c0a8e810ac5f0 (patch) | |
tree | d59468c6f2c531d12820fd2d779213265f4ad60b | |
parent | e804643b6dfcfb5842dea4b714601c6dd89f4944 (diff) | |
parent | 20ffc596a2771a96ac9b4a4838edc7779a48f0af (diff) | |
download | toolchain_gcc-0c894ee0a8500ee8efcef29c262c0a8e810ac5f0.tar.gz toolchain_gcc-0c894ee0a8500ee8efcef29c262c0a8e810ac5f0.tar.bz2 toolchain_gcc-0c894ee0a8500ee8efcef29c262c0a8e810ac5f0.zip |
Merge "Handle NULL return value of setlocale() in libstdc++"
3 files changed, 17 insertions, 9 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 fb9b425da..a89c16fcb 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 @@ -52,10 +52,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; bool __overflow = false; diff --git a/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.h b/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.h index 2c7600047..fa42918cc 100644 --- a/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.h +++ b/gcc-4.7/libstdc++-v3/config/locale/generic/c_locale.h @@ -60,7 +60,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { char* __old = std::setlocale(LC_NUMERIC, 0); char* __sav = 0; - if (__builtin_strcmp(__old, "C")) + if (__old && __builtin_strcmp(__old, "C")) { const size_t __len = __builtin_strlen(__old) + 1; __sav = new char[__len]; 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 30310752b..a260904f0 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 @@ -45,10 +45,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 = strftime(__s, __maxlen, __format, __tm); setlocale(LC_ALL, __sav); delete [] __sav; |