PR 13631 Problems in messages

Jonathan Wakely jwakely@redhat.com
Wed Mar 18 16:17:00 GMT 2015


On 03/12/14 14:54 +0000, Jonathan Wakely wrote:
>On 02/12/14 23:58 +0100, François Dumont wrote:
>>
>>   DR libstdc++/13631
>
>s/DR/PR/
>
>>   * include/bits/codecvt.h (codecvt<char, char, mbstate_t>): friend class
>>   std::messages<char>.
>>   (codecvt<wchar_t, char, mbstate_t>): friend class
>>   std::messages<wchar_t>.
>>   * config/locale/gnu/messages_member.h
>>   (messages<char>::do_open): Specialized.
>>   (messages<char>::do_close): Likewise.
>>   (messages<wchar_t>::do_open): Likewise.
>>   (messages<wchar_t>::do_close): Likewise.
>>   * config/locale/gnu/messages_member.cc:
>>   (messages<char>::do_open): Implement. Use bind_textdomain_codeset based
>>   on codecvt<char, char, mbstate_t>._M_c_locale_codecvt code set. Use
>>   internal cache to keep opened domain name with locale information.
>>   (messages<wchar_t>::do_open): Likewise with
>>   codecvt<wchar_t, char, mbstate_t>.
>>   (messages<char>::do_close): Implement. Clean cache information.
>>   (messages<wchar_t>::do_close): Likewise.
>>   (get_glibc_msg): New. Use dgettext rather than gettext using cached
>>   domain name associated to catalog id.
>>   (messages<char>::do_get): Use latter.
>>   (messages<wchar_t>::do_get): Likewise and use also cached locale
>>   codecvt<wchar_t, char, mbstate_t> facet to convert wchar_t default
>>   value to char and the result back to wchar_t.
>>   * testsuite/22_locale/messages/13631.cc: New.
>>   * testsuite/22_locale/messages/members/char/2.cc: Use also fr_FR locale
>>   for charset conversion to get the expected accented character.
>>
>>Tested under Linux x86_64.
>>
>>Ok to commit ?
>
>Yes, thanks for fixing this longstanding bug!
>
>(The use of std::string might have to change when we have two
>different versions of std::string, as we probably only want one
>Catalogs object to be shared by both ABIs, but I will deal with that
>as part of the std::string patch)

The new get_glibc_msg function doesn't compile with old versions of
glibc, _M_name_messages is not defined (the code is also not exception
safe, but that was not introduced by the recent changes).

Tested x86_64-linux, committed to trunk.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 4543 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20150318/54371f76/attachment.bin>


More information about the Libstdc++ mailing list