]> Savannah Git Hosting - gnulib.git/commitdiff
autoupdate
authorKarl Berry <karl@freefriends.org>
Fri, 25 Sep 2020 15:03:18 +0000 (08:03 -0700)
committerKarl Berry <karl@freefriends.org>
Fri, 25 Sep 2020 15:03:18 +0000 (08:03 -0700)
lib/regex_internal.c

index ed0a13461bd8fcf1ec616ce4aef94d207e456d58..e1b6b4d5af7f71eae296657d6a4a7a3e1bc11128 100644 (file)
@@ -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;