[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#24259: [PATCH 6/6] dfa: thread-safety: initialize mbrtowc_cache in d
From: |
Zev Weiss |
Subject: |
bug#24259: [PATCH 6/6] dfa: thread-safety: initialize mbrtowc_cache in dfa_init() |
Date: |
Thu, 18 Aug 2016 05:50:19 -0500 |
* 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
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, (continued)
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Zev Weiss, 2016/08/19
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Norihiro Tanaka, 2016/08/19
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Norihiro Tanaka, 2016/08/19
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Zev Weiss, 2016/08/19
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Norihiro Tanaka, 2016/08/20
- bug#24260: [PATCH 1/6] dfa: thread-safety: remove 'dfa' global in dfa.c, Zev Weiss, 2016/08/20
bug#24259: [PATCH 3/6] dfa: thread-safety: move parser state into struct dfa, Zev Weiss, 2016/08/18
bug#24259: [PATCH 5/6] dfa: thread-safety: eliminate static local variables, Zev Weiss, 2016/08/18
bug#24259: [PATCH 2/6] dfa: thread-safety: move lexer state into struct dfa, Zev Weiss, 2016/08/18
bug#24259: [PATCH 4/6] dfa: thread-safety: move regex syntax configuration into struct dfa, Zev Weiss, 2016/08/18
bug#24259: [PATCH 6/6] dfa: thread-safety: initialize mbrtowc_cache in dfa_init(),
Zev Weiss <=
bug#24259: [PATCH 0/6] dfa: thread safety, Jim Meyering, 2016/08/20
bug#24259: [PATCH 0/6] dfa: thread safety, Paul Eggert, 2016/08/23