From d3029b5a1a770d75806370618f7311a991107119 Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Fri, 8 Mar 2013 20:59:13 +0800 Subject: More fix to handle NULL return value of setlocale() in libstdc++/GCC4.7 Bionic setlocale() always returns NULL. Check return value before passing it to other libraries which don't expect NULL in argument. See 20ffc596a2771a96ac9b4a4838edc7779a48f0af https://code.google.com/p/android/issues/detail?id=46718 Change-Id: Ie2bf30d5f54c77401519ecb27cb97fb905639bba --- gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'gcc-4.7/libstdc++-v3/config/locale/generic/time_members.cc') 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; -- cgit v1.2.3