re PR libstdc++/13631 (Problems in messages)

PR libstdc++/13631
	* config/locale/gnu/messages_members.cc (get_glibc_msg): Fix fallback
	implementation for old glibc. Fix whitespace.

From-SVN: r221494
This commit is contained in:
Jonathan Wakely 2015-03-18 16:17:47 +00:00 committed by Jonathan Wakely
parent b4f3051a5f
commit 2a9611d03b
2 changed files with 41 additions and 34 deletions

View File

@ -1,3 +1,9 @@
2015-03-18 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/13631
* config/locale/gnu/messages_members.cc (get_glibc_msg): Fix fallback
implementation for old glibc. Fix whitespace.
2015-03-18 Jonathan Wakely <jwakely@redhat.com>
Torvald Riegel <triegel@redhat.com>

View File

@ -34,6 +34,8 @@
#include <limits>
#include <algorithm>
#include <vector>
#include <cstdlib> // std::free
#include <string.h> // ::strdup
#include <backward/auto_ptr.h>
#include <ext/concurrence.h>
@ -139,28 +141,28 @@ namespace
}
const char*
get_glibc_msg(__c_locale __attribute__((unused)) __locale_messages,
get_glibc_msg(__c_locale __locale_messages __attribute__((unused)),
const char* __name_messages __attribute__((unused)),
const char* __domainname,
const char* __dfault)
{
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
std::__c_locale __old = __uselocale(__locale_messages);
const char* __msg =
const_cast<const char*>(dgettext(__domainname, __dfault));
const char* __msg = dgettext(__domainname, __dfault);
__uselocale(__old);
return __msg;
#else
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, _M_name_messages);
if (char* __sav = strdup(setlocale(LC_ALL, 0)))
{
setlocale(LC_ALL, __name_messages);
const char* __msg = dgettext(__domainname, __dfault);
setlocale(LC_ALL, __sav);
delete [] __sav;
#endif
free(__sav);
return __msg;
}
return __dfault;
#endif
}
}
namespace std _GLIBCXX_VISIBILITY(default)
@ -199,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (!__cat_info)
return __dfault;
return get_glibc_msg(_M_c_locale_messages,
return get_glibc_msg(_M_c_locale_messages, _M_name_messages,
__cat_info->_M_domain.c_str(),
__dfault.c_str());
}
@ -257,8 +259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Make sure string passed to dgettext is \0 terminated.
*__dfault_next = '\0';
__translation
= get_glibc_msg(_M_c_locale_messages,
__translation = get_glibc_msg(_M_c_locale_messages, _M_name_messages,
__cat_info->_M_domain.c_str(), __dfault);
// If we end up getting default value back we can simply return original