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:
parent
b4f3051a5f
commit
2a9611d03b
|
@ -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>
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue