bug-grep
[Top][All Lists]
Advanced

[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






reply via email to

[Prev in Thread] Current Thread [Next in Thread]