Simplify by using mb_casecmp.
authorBruno Haible <bruno@clisp.org>
Tue, 16 Aug 2005 16:08:22 +0000 (16:08 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 16 Aug 2005 16:08:22 +0000 (16:08 +0000)
lib/ChangeLog
lib/strcasecmp.c

index b75cf9baee50531cf33149750b9de4e118442cc3..394c5c97cc80a66557b42d7dc1307c56098abab6 100644 (file)
@@ -1,3 +1,10 @@
+2005-08-16  Bruno Haible  <bruno@clisp.org>
+
+       * mbchar.h (mb_cmp, mb_casecmp): Order the invalid characters after
+       the valid ones. Makes the comparison operations transitive:
+       cmp (a, b) < 0 && cmp (b, c) < 0 ==> cmp (a, c) < 0.
+       * strcasecmp.c (strcasecmp): Use mb_casecmp.
+
 2005-08-16  Bruno Haible  <bruno@clisp.org>
 
        * strcase.h (strcasecmp): Add note in comments.
index 70c22a1889738ddee25a08d6a31a06c66fa9924e..65a29a95876d3053d83970d5feef27e1ef39edd8 100644 (file)
@@ -116,12 +116,6 @@ mbiter_multi_next (struct mbiter_multi *iter)
   iter->next_done = true;
 }
 
-static inline void
-mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff)
-{
-  iter->cur.ptr += ptrdiff;
-}
-
 /* Iteration macros.  */
 typedef struct mbiter_multi mbi_iterator_t;
 #define mbi_init(iter, startptr) \
@@ -167,44 +161,11 @@ strcasecmp (const char *s1, const char *s2)
 
       while (mbi_avail (iter1) && mbi_avail (iter2))
        {
-         /* Sort invalid characters after all valid ones.  */
-         if (!mbi_cur (iter1).wc_valid)
-           {
-             if (!mbi_cur (iter2).wc_valid)
-               {
-                 /* Compare two invalid characters.  */
-                 int cmp;
-
-                 if (mbi_cur (iter1).bytes > mbi_cur (iter2).bytes)
-                   return 1;
-                 if (mbi_cur (iter1).bytes < mbi_cur (iter2).bytes)
-                   return -1;
-                 cmp = memcmp (mbi_cur_ptr (iter1), mbi_cur_ptr (iter2),
-                               mbi_cur (iter1).bytes);
-                 if (cmp != 0)
-                   return cmp;
-               }
-             else
-               /* mbi_cur (iter1) invalid, mbi_cur (iter2) valid.  */
-               return 1;
-           }
-         else
-           {
-             if (!mbi_cur (iter2).wc_valid)
-               /* mbi_cur (iter1) valid, mbi_cur (iter2) invalid.  */
-               return -1;
-             else
-               {
-                 /* Compare two valid characters.  */
-                 wchar_t c1 = towlower (mbi_cur (iter1).wc);
-                 wchar_t c2 = towlower (mbi_cur (iter2).wc);
-
-                 if (c1 > c2)
-                   return 1;
-                 if (c1 < c2)
-                   return -1;
-               }
-           }
+         int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2));
+
+         if (cmp != 0)
+           return cmp;
+
          mbi_advance (iter1);
          mbi_advance (iter2);
        }