[
https://issues.apache.org/jira/browse/STDCXX-665?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12559237#action_12559237
]
vitek edited comment on STDCXX-665 at 1/29/08 7:51 AM:
--------------------------------------------------------------
Yeah, if I would have looked I would have seen __rw_setlocale. This does make
me feel a little better about option (4). This change would allow us to
successfully open a message catalog when the locale provided to
std::messages<T>::open() was not the C/POSIX locale. Any proposal for what we
would do if this is not the case? Maybe just fail?
Here is a test that I believe would fail the second assert because AIX requires
LC_MESSAGES to be set to something other than "C".
{noformat}
const std::locale classic (std::locale::classic ());
const std::locale en_US ("en_US");
const std::messages<char>& m = std::use_facet<std::messages<char> >(classic);
// this would work because we would call setlocale (LC_MESSAGES, "en_US")
// internally
std::messages_base::catalog c1 = m.open ("catalog", en_US);
assert (! (c1 < 0));
m.close (c1);
// this would not work because we would call setlocale (LC_MESSAGES, "C")
// internally, and the NLSPATH lookup is disabled
std::messages_base::catalog c2 = m.open ("catalog", classic);
assert (! (c2 < 0));
m.close (c2);
{noformat}
In that case, I feel like I should use all of 1, 2 and 4.
was (Author: vitek):
Yeah, if I would have looked I would have seen __rw_setlocale. This does
make me feel a little better about option (4). This change would allow us to
successfully open a message catalog when the locale provided to
std::messages<T>::open() was not the C/POSIX locale. Any proposal for what we
would do if this is not the case? Maybe just fail?
Here is a test that I believe would fail the second assert because AIX requires
LC_MESSAGES to be set to something other than "C".
const std::locale classic (std::locale::classic ());
const std::locale en_US ("en_US");
const std::messages<char>& m = std::use_facet<std::messages<char> >(classic);
// this would work because we would call setlocale (LC_MESSAGES, "en_US")
// internally
std::messages_base::catalog c1 = m.open ("catalog", en_US);
assert (! (c1 < 0));
m.close (c1);
// this would not work because we would call setlocale (LC_MESSAGES, "C")
// internally, and the NLSPATH lookup is disabled
std::messages_base::catalog c2 = m.open ("catalog", classic);
assert (! (c2 < 0));
m.close (c2);
In that case, I feel like I should use all of 1, 2 and 4.
> [IBM XLC++ 9.0/AIX 5.3] 22.locale.messages fails with assertions
> ----------------------------------------------------------------
>
> Key: STDCXX-665
> URL: https://issues.apache.org/jira/browse/STDCXX-665
> Project: C++ Standard Library
> Issue Type: Bug
> Components: Tests
> Affects Versions: 4.2.0
> Reporter: Travis Vitek
> Assignee: Travis Vitek
> Fix For: 4.2.1
>
> Attachments: stdcxx-665.patch
>
>
> Currently only single threaded builds show this problem
> NAME STATUS WARN ASSERTS FAILED PERCNT USER
> SYS REAL
> 22.locale.messages 0 0 268 106 60% 0.090
> 0.640 3.960
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.