You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2007/07/09 01:08:00 UTC
svn commit: r554467 - /incubator/stdcxx/trunk/src/locale_eq.cpp
Author: sebor
Date: Sun Jul 8 16:07:59 2007
New Revision: 554467
URL: http://svn.apache.org/viewvc?view=rev&rev=554467
Log:
2007-07-08 Martin Sebor <se...@roguewave.com>
STDCXX-477
* locale_eq.cpp (operator==): Considered the names of locales when
all their standard and byname facet masks are the same and all their
facet pointers are the same.
Modified:
incubator/stdcxx/trunk/src/locale_eq.cpp
Modified: incubator/stdcxx/trunk/src/locale_eq.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/src/locale_eq.cpp?view=diff&rev=554467&r1=554466&r2=554467
==============================================================================
--- incubator/stdcxx/trunk/src/locale_eq.cpp (original)
+++ incubator/stdcxx/trunk/src/locale_eq.cpp Sun Jul 8 16:07:59 2007
@@ -61,19 +61,24 @@
if (!_C_body->_C_n_usr_facets && !rhs._C_body->_C_n_usr_facets) {
// in order to compare equal, both bodies must have the same
- // sets of facets (some slots may still be uninitialized)
+ // sets of facets (some slots may still be uninitialized) and
+ // not have different names
const bool eql =
_C_body->_C_std_facet_bits == rhs._C_body->_C_std_facet_bits
&& _C_body->_C_byname_facet_bits == rhs._C_body->_C_byname_facet_bits
&& !memcmp (_C_body->_C_std_facets, rhs._C_body->_C_std_facets,
- _C_body->_C_n_std_facets * sizeof *_C_body->_C_std_facets);
+ _C_body->_C_n_std_facets * sizeof *_C_body->_C_std_facets)
+ && !strcmp (_C_body->_C_name, rhs._C_body->_C_name);
// at least some standard facets must have been replaced in order
- // for two locale objects not to share the same body
- _RWSTD_ASSERT ( _C_body->_C_std_facet_bits != _C_body->_C_all
+ // for two "equal" locale objects not to share the same body, or
+ // the locales' names must be different
+ _RWSTD_ASSERT ( eql
+ || _C_body->_C_std_facet_bits != _C_body->_C_all
|| rhs._C_body->_C_std_facet_bits != _C_body->_C_all
|| _C_body->_C_byname_facet_bits != _C_body->_C_all
- || rhs._C_body->_C_byname_facet_bits != _C_body->_C_all);
+ || rhs._C_body->_C_byname_facet_bits != _C_body->_C_all
+ || strcmp (_C_body->_C_name, rhs._C_body->_C_name));
// facet bits of both objects must be the same if the two objects
// share the exact same facets (otherwise the bits may or may not