From 6887c63276334e1ca7875c431eef503553527f17 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 7 Sep 2023 14:51:58 -0700 Subject: [PATCH] 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. --- ChangeLog | 8 ++++++++ lib/mbscasecmp.c | 19 ++++++++++++++++++- modules/mbscasecmp | 5 ++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba49a1177b..2aec64130e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2023-09-07 Paul Eggert + 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. diff --git a/lib/mbscasecmp.c b/lib/mbscasecmp.c index 80dc18529d..5e0bc67dc0 100644 --- a/lib/mbscasecmp.c +++ b/lib/mbscasecmp.c @@ -23,8 +23,14 @@ #include #include +#include +#include -#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 (;;) diff --git a/modules/mbscasecmp b/modules/mbscasecmp index 234b7bc7a3..2fd8f1f4ce 100644 --- a/modules/mbscasecmp +++ b/modules/mbscasecmp @@ -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]) -- 2.39.5