This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[PATCH] Fix _M_compare_helper
- From: Paolo Carlini <pcarlini at unitus dot it>
- To: libstdc++ at gcc dot gnu dot org
- Cc: bkoz at redhat dot com
- Date: Sun, 10 Mar 2002 00:31:47 +0100
- Subject: [PATCH] Fix _M_compare_helper
Hi all, hi Benjamin,
this is the patch discussed with Ulrich, which fixes part of the issue with
collate_members_wchar_t.cc: with it only one VERIFY fails, that at line 107.
Right now this is the best we can do, I think, barring further debugging of the
glibc side of the problem.
Ok?
Ciao, Paolo.
/////////////////
2002-03-09 Ulrich Drepper <drepper@redhat.com>
Paolo Carlini <pcarlini@unitus.it>
* config/locale/generic/collate_members.cc
(collate<char,wchar_t>::_M_compare_helper): normalize
values returned by strcoll and wcscoll.
* config/locale/gnu/collate_members.cc
(collate<char,wchar_t>::_M_compare_helper): ditto
for __strcoll_l and __wcscoll_l.
diff -urN libstdc++-v3-orig/config/locale/generic/collate_members.cc
libstdc++-v3/config/locale/generic/collate_members.cc
--- libstdc++-v3-orig/config/locale/generic/collate_members.cc Sat Mar 9
03:16:32 2002
+++ libstdc++-v3/config/locale/generic/collate_members.cc Sat Mar 9 21:58:53
2002
@@ -43,7 +43,10 @@
int
collate<char>::_M_compare_helper(const char* __one,
const char* __two) const
- { return strcoll(__one, __two); }
+ {
+ int __cmp = strcoll(__one, __two);
+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
+ }
template<>
size_t
@@ -56,7 +59,10 @@
int
collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
const wchar_t* __two) const
- { return wcscoll(__one, __two); }
+ {
+ int __cmp = wcscoll(__one, __two);
+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
+ }
template<>
size_t
diff -urN libstdc++-v3-orig/config/locale/gnu/collate_members.cc
libstdc++-v3/config/locale/gnu/collate_members.cc
--- libstdc++-v3-orig/config/locale/gnu/collate_members.cc Sat Mar 9 03:16:33
2002
+++ libstdc++-v3/config/locale/gnu/collate_members.cc Sat Mar 9 22:00:01 2002
@@ -43,7 +43,10 @@
int
collate<char>::_M_compare_helper(const char* __one,
const char* __two) const
- { return __strcoll_l(__one, __two, _M_c_locale_collate); }
+ {
+ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
+ }
template<>
size_t
@@ -56,7 +59,10 @@
int
collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
const wchar_t* __two) const
- { return __wcscoll_l(__one, __two, _M_c_locale_collate); }
+ {
+ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
+ }
template<>
size_t