changeset 6051:c9d12df22e6e

Simplify by using mb_casecmp.
author Bruno Haible <bruno@clisp.org>
date Tue, 16 Aug 2005 16:08:22 +0000
parents 2b88df66cd7b
children 29087842aa86
files lib/ChangeLog lib/strcasecmp.c
diffstat 2 files changed, 10 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -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.
--- a/lib/strcasecmp.c
+++ b/lib/strcasecmp.c
@@ -116,12 +116,6 @@
   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 @@
 
       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;
+	  int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2));
 
-		  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 (cmp != 0)
+	    return cmp;
 
-		  if (c1 > c2)
-		    return 1;
-		  if (c1 < c2)
-		    return -1;
-		}
-	    }
 	  mbi_advance (iter1);
 	  mbi_advance (iter2);
 	}