From 5fd2323a63fc8214718db689743d13c25f5cc9cb Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 25 Sep 2020 08:03:18 -0700 Subject: [PATCH] autoupdate --- lib/regex_internal.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/regex_internal.c b/lib/regex_internal.c index ed0a13461b..e1b6b4d5af 100644 --- a/lib/regex_internal.c +++ b/lib/regex_internal.c @@ -300,20 +300,18 @@ build_wcs_upper_buffer (re_string_t *pstr) while (byte_idx < end_idx) { wchar_t wc; - unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; - if (isascii (ch) && mbsinit (&pstr->cur_state)) + if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) + && mbsinit (&pstr->cur_state)) { + /* In case of a singlebyte character. */ + pstr->mbs[byte_idx] + = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ - wchar_t wcu = __towupper (ch); - if (isascii (wcu)) - { - pstr->mbs[byte_idx] = wcu; - pstr->wcs[byte_idx] = wcu; - byte_idx++; - continue; - } + pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; + ++byte_idx; + continue; } remain_len = end_idx - byte_idx; @@ -350,6 +348,7 @@ build_wcs_upper_buffer (re_string_t *pstr) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; -- 2.39.5