From b45e17c8497b663e33e7bf6f89ef7f9873bc0cc1 Mon Sep 17 00:00:00 2001 From: Thomas Roessler Date: Tue, 9 Jan 2007 10:31:09 +0000 Subject: [PATCH] #2673: Make mutt_which_case() multi-byte aware. --- pattern.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pattern.c b/pattern.c index c10f92d0..fcc03569 100644 --- a/pattern.c +++ b/pattern.c @@ -134,12 +134,22 @@ int mutt_getvaluebychar (char ch, struct mapping_t *table) /* if no uppercase letters are given, do a case-insensitive search */ int mutt_which_case (const char *s) { - while (*s) + wchar_t w; + mbstate_t mb; + size_t l; + + memset (&mb, 0, sizeof (mb)); + + for (; (l = mbrtowc (&w, s, MB_CUR_MAX, &mb)) != 0; s += l) { - if (isalpha ((unsigned char) *s) && isupper ((unsigned char) *s)) + if (l == (size_t) -2) + continue; /* shift sequences */ + if (l == (size_t) -1) + return 0; /* error; assume case-sensitive */ + if (iswalpha ((wint_t) w) && iswupper ((wint_t) w)) return 0; /* case-sensitive */ - s++; } + return REG_ICASE; /* case-insensitive */ } -- 2.40.0