aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/libstdc++-v3
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2014-04-14 16:44:56 -0700
committerAndrew Hsieh <andrewhsieh@google.com>2014-04-22 15:33:21 -0700
commita699116310d3e1df5a9f6baa2f1832c4d04b02b8 (patch)
treef2cb79af05502217f9beb5d90b824b4cf9bd9ccc /gcc-4.9/libstdc++-v3
parent12bd1931fd8a295e88a39aebc4f6c0ef98add4f5 (diff)
downloadtoolchain_gcc-a699116310d3e1df5a9f6baa2f1832c4d04b02b8.tar.gz
toolchain_gcc-a699116310d3e1df5a9f6baa2f1832c4d04b02b8.tar.bz2
toolchain_gcc-a699116310d3e1df5a9f6baa2f1832c4d04b02b8.zip
[4.9] Handle NULL return value of setlocale() in libstdc++
See 9fc377fd2c2dce50298e33e578d7065e285171e0 Change-Id: I3cf4b8efe75fa45c5743fd7c1f6fc8170597c0a7
Diffstat (limited to 'gcc-4.9/libstdc++-v3')
-rw-r--r--gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.cc36
-rw-r--r--gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.h2
-rw-r--r--gcc-4.9/libstdc++-v3/config/locale/generic/time_members.cc24
3 files changed, 41 insertions, 21 deletions
diff --git a/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.cc b/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.cc
index abf872742..6ce044152 100644
--- a/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -51,10 +51,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;
@@ -116,10 +120,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__
@@ -161,10 +169,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.9/libstdc++-v3/config/locale/generic/c_locale.h b/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.h
index e934ffc3c..aedb13ffe 100644
--- a/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.h
+++ b/gcc-4.9/libstdc++-v3/config/locale/generic/c_locale.h
@@ -59,7 +59,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.9/libstdc++-v3/config/locale/generic/time_members.cc b/gcc-4.9/libstdc++-v3/config/locale/generic/time_members.cc
index f660c948e..2ed10f561 100644
--- a/gcc-4.9/libstdc++-v3/config/locale/generic/time_members.cc
+++ b/gcc-4.9/libstdc++-v3/config/locale/generic/time_members.cc
@@ -44,10 +44,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;
@@ -129,10 +133,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;