diff options
-rw-r--r-- | gcc-4.4.3/README.google | 7 | ||||
-rw-r--r-- | gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.cc | 36 | ||||
-rw-r--r-- | gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.h | 2 | ||||
-rw-r--r-- | gcc-4.4.3/libstdc++-v3/config/locale/generic/time_members.cc | 24 |
4 files changed, 48 insertions, 21 deletions
diff --git a/gcc-4.4.3/README.google b/gcc-4.4.3/README.google index c6b3587b2..bfddb6db5 100644 --- a/gcc-4.4.3/README.google +++ b/gcc-4.4.3/README.google @@ -2111,3 +2111,10 @@ gcc/testsuite/g++.dg/init/ref15.C Back port upstream fixes r156042 and r148110 to fix broken tests. Owner: dougkwan Status: in upstream. + +libstdc++-v3/config/locale/generic/c_locale.cc +libstdc++-v3/config/locale/generic/c_locale.h +libstdc++-v3/config/locale/generic/time_members.cc + Hanlde NULL return value of setlocale(), required by bionic. + Owner: jingyu + Status: local diff --git a/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.cc b/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.cc index 3b9f1bd42..587dc11de 100644 --- a/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.cc +++ b/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.cc @@ -51,10 +51,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { // Assumes __s formatted for "C" locale. char* __old = setlocale(LC_ALL, NULL); - const size_t __len = strlen(__old) + 1; - char* __sav = new char[__len]; - memcpy(__sav, __old, __len); - setlocale(LC_ALL, "C"); + char* __sav = NULL; + if (__old != NULL) + { + const size_t __len = strlen(__old) + 1; + __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + } char* __sanity; bool __overflow = false; @@ -116,10 +120,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { // Assumes __s formatted for "C" locale. char* __old = setlocale(LC_ALL, NULL); - const size_t __len = strlen(__old) + 1; - char* __sav = new char[__len]; - memcpy(__sav, __old, __len); - setlocale(LC_ALL, "C"); + char* __sav = NULL; + if (__old != NULL) + { + 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__ @@ -161,10 +169,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { // Assumes __s formatted for "C" locale. char* __old = setlocale(LC_ALL, NULL); - const size_t __len = strlen(__old) + 1; - char* __sav = new char[__len]; - memcpy(__sav, __old, __len); - setlocale(LC_ALL, "C"); + char* __sav = NULL; + if (__old != NULL) + { + 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.4.3/libstdc++-v3/config/locale/generic/c_locale.h b/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.h index 472ef5505..e27a9cdf6 100644 --- a/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.h +++ b/gcc-4.4.3/libstdc++-v3/config/locale/generic/c_locale.h @@ -59,7 +59,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { char* __old = std::setlocale(LC_NUMERIC, NULL); char* __sav = NULL; - if (__builtin_strcmp(__old, "C")) + if (__old != NULL && __builtin_strcmp(__old, "C")) { const size_t __len = __builtin_strlen(__old) + 1; __sav = new char[__len]; diff --git a/gcc-4.4.3/libstdc++-v3/config/locale/generic/time_members.cc b/gcc-4.4.3/libstdc++-v3/config/locale/generic/time_members.cc index 86c924959..46622944c 100644 --- a/gcc-4.4.3/libstdc++-v3/config/locale/generic/time_members.cc +++ b/gcc-4.4.3/libstdc++-v3/config/locale/generic/time_members.cc @@ -43,10 +43,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const tm* __tm) const { char* __old = setlocale(LC_ALL, NULL); - const size_t __llen = strlen(__old) + 1; - char* __sav = new char[__llen]; - memcpy(__sav, __old, __llen); - setlocale(LC_ALL, _M_name_timepunct); + char* __sav = NULL; + if (__old != NULL) + { + 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; @@ -128,10 +132,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const tm* __tm) const { char* __old = setlocale(LC_ALL, NULL); - const size_t __llen = strlen(__old) + 1; - char* __sav = new char[__llen]; - memcpy(__sav, __old, __llen); - setlocale(LC_ALL, _M_name_timepunct); + char* __sav = NULL; + if (__old != NULL) + { + 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; |