]> Savannah Git Hosting - gnulib.git/commitdiff
dfa: Optimize clearing an mbstate_t.
authorBruno Haible <bruno@clisp.org>
Sun, 16 Jul 2023 05:31:02 +0000 (07:31 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 16 Jul 2023 08:29:20 +0000 (10:29 +0200)
* lib/dfa.c (mbszero) [GAWK]: Add fallback definition.
(mbs_to_wchar, lex, addtok_wc, dfaexec_main): Use mbszero.
* modules/dfa (Depends-on): Add mbszero.

ChangeLog
lib/dfa.c
modules/dfa

index 567c971b6fb8ad6bbcbacbd9830d22d54769d988..2caecc594a33569792c2f22fc7d77978528eac8e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2023-07-16  Bruno Haible  <bruno@clisp.org>
+
+       dfa: Optimize clearing an mbstate_t.
+       * lib/dfa.c (mbszero) [GAWK]: Add fallback definition.
+       (mbs_to_wchar, lex, addtok_wc, dfaexec_main): Use mbszero.
+       * modules/dfa (Depends-on): Add mbszero.
+
 2023-07-16  Bruno Haible  <bruno@clisp.org>
 
        uchar-c23: Optimize clearing an mbstate_t.
index 5cf76ecf088787df71d03e7104b7f255cad22afa..ff0f53348c6807a4d2e56ea3353143974ad558b0 100644 (file)
--- a/lib/dfa.c
+++ b/lib/dfa.c
@@ -52,6 +52,7 @@
 # define c32tob wctob
 # define c32isprint iswprint
 # define c32isspace iswspace
+# define mbszero(p) memset ((p), 0, sizeof (mbstate_t))
 #else
 /* Use ISO C 11 + gnulib API.  */
 # include <uchar.h>
@@ -661,7 +662,7 @@ mbs_to_wchar (wint_t *pwc, char const *s, idx_t n, struct dfa *d)
              'mbrtoc32-regular' module.  */
           return nbytes;
         }
-      memset (&d->mbs, 0, sizeof d->mbs);
+      mbszero (&d->mbs);
     }
 
   *pwc = wc;
@@ -1585,7 +1586,8 @@ lex (struct dfa *dfa)
               else
                 {
                   char buf[MB_LEN_MAX + 1];
-                  mbstate_t s = { 0 };
+                  mbstate_t s;
+                  mbszero (&s);
                   size_t stored_bytes = c32rtomb (buf, dfa->lex.wctok, &s);
                   if (stored_bytes < (size_t) -1)
                     {
@@ -1722,7 +1724,8 @@ static void
 addtok_wc (struct dfa *dfa, wint_t wc)
 {
   unsigned char buf[MB_LEN_MAX];
-  mbstate_t s = { 0 };
+  mbstate_t s;
+  mbszero (&s);
   size_t stored_bytes = c32rtomb ((char *) buf, wc, &s);
   int buflen;
 
@@ -3495,7 +3498,7 @@ dfaexec_main (struct dfa *d, char const *begin, char *end, bool allow_nl,
 
   if (multibyte)
     {
-      memset (&d->mbs, 0, sizeof d->mbs);
+      mbszero (&d->mbs);
       if (d->mb_follows.alloc == 0)
         alloc_position_set (&d->mb_follows, d->nleaves);
     }
index 57094f590bb6e596500d73de07b35046ca0b22b7..b41eaca8dd7395e9cf21d170aa5ef3ec86b04d6d 100644 (file)
@@ -21,6 +21,7 @@ flexmember
 idx
 locale
 mbrtoc32-regular
+mbszero
 regex
 stdbool
 stddef