unistr/u*-strcoll: Try harder to distinguish different strings.
authorBruno Haible <bruno@clisp.org>
Sun, 10 Jan 2010 22:11:54 +0000 (23:11 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 10 Jan 2010 22:11:54 +0000 (23:11 +0100)
ChangeLog
lib/unistr/u-strcoll.h

index f1f514a..6d90821 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2010-01-10  Bruno Haible  <bruno@clisp.org>
 
+       unistr/u*-strcoll: Try harder to distinguish different strings.
+       * lib/unistr/u-strcoll.h (FUNC): When sl1 and sl2 are the same,
+       compare s1 and s2 to see if they are different.
+
+2010-01-10  Bruno Haible  <bruno@clisp.org>
+
        unistr/u*-stpncpy: Fix the return value.
        * lib/unistr.h (u8_stpncpy, u16_stpncpy, u32_stpncpy): Make the
        description of the return value consistent with stpncpy in glibc.
index e1dc713..9ec5c60 100644 (file)
@@ -41,6 +41,12 @@ FUNC (const UNIT *s1, const UNIT *s2)
               /* strcoll succeeded.  */
               free (sl1);
               free (sl2);
+              /* The conversion to locale encoding can do transliteration or
+                 map some characters to question marks.  Therefore sl1 and sl2
+                 may be equal when s1 and s2 were in fact different.  Return a
+                 nonzero result in this case.  */
+              if (result == 0)
+                result = U_STRCMP (s1, s2);
             }
           else
             {