This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Use __mbrtowc instead of mbrtowc in regex
- From: Paolo Bonzini <bonzini at gnu dot org>
- To: Glibc <libc-alpha at sourceware dot org>
- Date: Wed, 31 Dec 2008 16:18:44 +0100
- Subject: [PATCH] Use __mbrtowc instead of mbrtowc in regex
While looking at the regex code I noticed that it does not use the
internal symbol for mbrtowc. I suppose there is no reason not to do
that, hence this patch.
Ok?
Paolo
2008-12-31 Paolo Bonzini <bonzini@gnu.org>
* posix/regcomp.c (re_compile_fastmap_iter): Use __mbrtowc.
* posix/regex_internal.c (build_wcs_buffer, build_wcs_upper_buffer,
re_string_skip_chars, re_string_reconstruct): Likewise.
* posix/regex_internal.h [!_LIBC] (__mbrtowc): New #define.
diff -u old/regcomp.c posix/regcomp.c
--- old/regcomp.c 2008-12-31 15:49:43.000000000 +0100
+++ posix/regcomp.c 2008-12-31 15:49:53.000000000 +0100
@@ -327,8 +327,8 @@
&& dfa->nodes[node].mb_partial)
*p++ = dfa->nodes[node].opr.c;
memset (&state, '\0', sizeof (state));
- if (mbrtowc (&wc, (const char *) buf, p - buf,
- &state) == p - buf
+ if (__mbrtowc (&wc, (const char *) buf, p - buf,
+ &state) == p - buf
&& (__wcrtomb ((char *) buf, towlower (wc), &state)
!= (size_t) -1))
re_set_fastmap (fastmap, 0, buf[0]);
Only in .: regex-plt-mbrtowc.patch
diff -u old/regex_internal.c posix/regex_internal.c
--- old/regex_internal.c 2008-12-31 15:49:43.000000000 +0100
+++ posix/regex_internal.c 2008-12-31 15:50:09.000000000 +0100
@@ -229,7 +229,7 @@
}
else
p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx;
- mbclen = mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+ mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
if (BE (mbclen == (size_t) -2, 0))
{
/* The buffer doesn't have enough space, finish to build. */
@@ -299,9 +299,9 @@
remain_len = end_idx - byte_idx;
prev_st = pstr->cur_state;
- mbclen = mbrtowc (&wc,
- ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
- + byte_idx), remain_len, &pstr->cur_state);
+ mbclen = __mbrtowc (&wc,
+ ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
+ + byte_idx), remain_len, &pstr->cur_state);
if (BE (mbclen + 2 > 2, 1))
{
wchar_t wcu = wc;
@@ -369,7 +369,7 @@
}
else
p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
- mbclen = mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+ mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
if (BE (mbclen + 2 > 2, 1))
{
wchar_t wcu = wc;
@@ -491,8 +491,8 @@
int remain_len;
remain_len = pstr->len - rawbuf_idx;
prev_st = pstr->cur_state;
- mbclen = mbrtowc (&wc, (const char *) pstr->raw_mbs + rawbuf_idx,
- remain_len, &pstr->cur_state);
+ mbclen = __mbrtowc (&wc, (const char *) pstr->raw_mbs + rawbuf_idx,
+ remain_len, &pstr->cur_state);
if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0))
{
/* We treat these cases as a single byte character. */
@@ -734,8 +734,8 @@
/* XXX Don't use mbrtowc, we know which conversion
to use (UTF-8 -> UCS4). */
memset (&cur_state, 0, sizeof (cur_state));
- mbclen = mbrtowc (&wc2, (const char *) p, mlen,
- &cur_state);
+ mbclen = __mbrtowc (&wc2, (const char *) p, mlen,
+ &cur_state);
if (raw + offset - p <= mbclen
&& mbclen < (size_t) -2)
{
diff -u old/regex_internal.h posix/regex_internal.h
--- old/regex_internal.h 2008-12-31 15:49:43.000000000 +0100
+++ posix/regex_internal.h 2008-12-31 15:50:21.000000000 +0100
@@ -116,6 +116,7 @@
# define __wctype wctype
# define __iswctype iswctype
# define __btowc btowc
+# define __mbrtowc mbrtowc
# define __mempcpy mempcpy
# define __wcrtomb wcrtomb
# define __regfree regfree