* src/dfa.c (dfasyntax): Remove initialization of mbrtowc_cache. (init_mbrtowc_cache): New function. (dfa_init): Call init_mbrtowc_cache(). --- src/dfa.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/src/dfa.c b/src/dfa.c index 970b51f..e577393 100644 --- a/src/dfa.c +++ b/src/dfa.c @@ -766,6 +766,20 @@ dfa_using_utf8 (void) return using_utf8; } +static void +init_mbrtowc_cache (void) +{ + int i; + for (i = CHAR_MIN; i <= CHAR_MAX; ++i) + { + char c = i; + unsigned char uc = i; + mbstate_t s = { 0 }; + wchar_t wc; + mbrtowc_cache[uc] = mbrtowc (&wc, &c, 1, &s) <= 1 ? wc : WEOF; + } +} + /* Entry point to set syntax options. */ void dfasyntax (struct dfa *dfa, reg_syntax_t bits, bool fold, unsigned char eol) @@ -778,13 +792,9 @@ dfasyntax (struct dfa *dfa, reg_syntax_t bits, bool fold, unsigned char eol) for (i = CHAR_MIN; i <= CHAR_MAX; ++i) { - char c = i; unsigned char uc = i; - mbstate_t s = { 0 }; - wchar_t wc; - mbrtowc_cache[uc] = mbrtowc (&wc, &c, 1, &s) <= 1 ? wc : WEOF; - /* Now that mbrtowc_cache[uc] is set, use it to calculate sbit. */ + /* Use mbrtowc_cache to calculate sbit. */ dfa->syntax.sbit[uc] = char_context (dfa, uc); switch (dfa->syntax.sbit[uc]) { @@ -4203,6 +4213,7 @@ dfa_init (void) { check_utf8 (); check_unibyte_c (); + init_mbrtowc_cache (); } /* vim:set shiftwidth=2: */ -- 2.8.1