diff options
Diffstat (limited to 'libstdc++-v3/config/locale/gnu/messages_members.h')
-rw-r--r-- | libstdc++-v3/config/locale/gnu/messages_members.h | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h index bfe25333697..28d783c136f 100644 --- a/libstdc++-v3/config/locale/gnu/messages_members.h +++ b/libstdc++-v3/config/locale/gnu/messages_members.h @@ -55,10 +55,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std) size_t __refs) : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL) { - const size_t __len = __builtin_strlen(__s) + 1; - char* __tmp = new char[__len]; - __builtin_memcpy(__tmp, __s, __len); - _M_name_messages = __tmp; + if (__builtin_strcmp(__s, _S_get_c_name()) != 0) + { + const size_t __len = __builtin_strlen(__s) + 1; + char* __tmp = new char[__len]; + __builtin_memcpy(__tmp, __s, __len); + _M_name_messages = __tmp; + } + else + _M_name_messages = _S_get_c_name(); // Last to avoid leaking memory if new throws. _M_c_locale_messages = _S_clone_c_locale(__cloc); @@ -104,11 +109,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) : messages<_CharT>(__refs) { if (this->_M_name_messages != locale::facet::_S_get_c_name()) - delete [] this->_M_name_messages; - const size_t __len = __builtin_strlen(__s) + 1; - char* __tmp = new char[__len]; - __builtin_memcpy(__tmp, __s, __len); - this->_M_name_messages = __tmp; + { + delete [] this->_M_name_messages; + if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0) + { + const size_t __len = __builtin_strlen(__s) + 1; + char* __tmp = new char[__len]; + __builtin_memcpy(__tmp, __s, __len); + this->_M_name_messages = __tmp; + } + else + this->_M_name_messages = locale::facet::_S_get_c_name(); + } if (__builtin_strcmp(__s, "C") != 0 && __builtin_strcmp(__s, "POSIX") != 0) |