]> Savannah Git Hosting - gnulib.git/commitdiff
mbscasecmp: support GNULIB_MCEL_PREFER
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 7 Sep 2023 21:51:58 +0000 (14:51 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 7 Sep 2023 22:08:45 +0000 (15:08 -0700)
* lib/mbscasecmp.c: Include stdlib.h, since we use MB_CUR_MAX.
Include uchar.h, for c32tolower.
(GNULIB_MCEL_PREFER): Include mcel.h instead of mbuiterf.h.
(mbscasecmp) [GNULIB_MCEL_PREFER]: Use mcel instead of mbuiterf.
* modules/mbscasecmp (Depends-on): Add c32tolower, stdlib, uchar.
Depend on mbuiterf only if not preferring mcel.

ChangeLog
lib/mbscasecmp.c
modules/mbscasecmp

index ba49a1177b8e3f0f0bed13e1d6fc2fed232761ff..2aec64130ee6698a0250d539f658e1250a6625da 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2023-09-07  Paul Eggert  <eggert@cs.ucla.edu>
 
+       mbscasecmp: support GNULIB_MCEL_PREFER
+       * lib/mbscasecmp.c: Include stdlib.h, since we use MB_CUR_MAX.
+       Include uchar.h, for c32tolower.
+       (GNULIB_MCEL_PREFER): Include mcel.h instead of mbuiterf.h.
+       (mbscasecmp) [GNULIB_MCEL_PREFER]: Use mcel instead of mbuiterf.
+       * modules/mbscasecmp (Depends-on): Add c32tolower, stdlib, uchar.
+       Depend on mbuiterf only if not preferring mcel.
+
        exclude: support GNULIB_MCEL_PREFER
        Support mcel API for apps that prefer it.
        The following changes are in effect only if GNULIB_MCEL_PREFER.
index 80dc18529d7d3be0931ea4894516153aadcfeebc..5e0bc67dc03c93285bc392bf8c3e7cc4aa513fda 100644 (file)
 
 #include <ctype.h>
 #include <limits.h>
+#include <stdlib.h>
+#include <uchar.h>
 
-#include "mbuiterf.h"
+#if GNULIB_MCEL_PREFER
+# include "mcel.h"
+#else
+# include "mbuiterf.h"
+#endif
 
 /* Compare the character strings S1 and S2, ignoring case, returning less than,
    equal to or greater than zero if S1 is lexicographically less than, equal to
@@ -45,6 +51,16 @@ mbscasecmp (const char *s1, const char *s2)
      most often already in the very few first characters.  */
   if (MB_CUR_MAX > 1)
     {
+#if GNULIB_MCEL_PREFER
+      while (true)
+        {
+          mcel_t g1 = mcel_scanz (iter1); iter1 += g1.len;
+          mcel_t g2 = mcel_scanz (iter2); iter2 += g2.len;
+          int cmp = mcel_tocmp (c32tolower, g1, g2);
+          if (cmp | !g1.ch)
+            return cmp;
+        }
+#else
       mbuif_state_t state1;
       mbuif_init (state1);
 
@@ -70,6 +86,7 @@ mbscasecmp (const char *s1, const char *s2)
         /* s1 terminated before s2.  */
         return -1;
       return 0;
+#endif
     }
   else
     for (;;)
index 234b7bc7a36677d0964f4c16efd05f89124cc44d..2fd8f1f4ce9cd0a5f5629328ace48b89dd3718be 100644 (file)
@@ -5,8 +5,11 @@ Files:
 lib/mbscasecmp.c
 
 Depends-on:
-mbuiterf
+c32tolower
+mbuiterf            [test "$GNULIB_MCEL_PREFER" != yes]
+stdlib
 string
+uchar
 
 configure.ac:
 gl_STRING_MODULE_INDICATOR([mbscasecmp])