From: Bruno Haible Date: Sun, 16 Jul 2023 05:31:02 +0000 (+0200) Subject: dfa: Optimize clearing an mbstate_t. X-Git-Tag: v1.0~1089 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=776c52c2f432891e2a40d3be889683f1cc2d3452;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index 567c971b6f..2caecc594a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-07-16 Bruno Haible + + 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 uchar-c23: Optimize clearing an mbstate_t. diff --git a/lib/dfa.c b/lib/dfa.c index 5cf76ecf08..ff0f53348c 100644 --- 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 @@ -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); } diff --git a/modules/dfa b/modules/dfa index 57094f590b..b41eaca8dd 100644 --- a/modules/dfa +++ b/modules/dfa @@ -21,6 +21,7 @@ flexmember idx locale mbrtoc32-regular +mbszero regex stdbool stddef