From dad9ed27ab75a4e6aa39205d19a6978ba15fc3ab Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 16 Jul 2023 07:30:55 +0200 Subject: [PATCH] vasnprintf, vasnwprintf: Optimize clearing an mbstate_t. * lib/vasnprintf.c (VASNPRINTF): Use mbszero. * modules/vasnprintf (Depends-on): Add mbszero. * modules/vasnwprintf (Depends-on): Likewise. * modules/c-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. --- ChangeLog | 15 +++++++++++++ lib/vasnprintf.c | 34 ++++++++++++++--------------- modules/c-vasnprintf | 1 + modules/unistdio/u16-u16-vasnprintf | 1 + modules/unistdio/u16-vasnprintf | 1 + modules/unistdio/u32-u32-vasnprintf | 1 + modules/unistdio/u32-vasnprintf | 1 + modules/unistdio/u8-u8-vasnprintf | 1 + modules/unistdio/u8-vasnprintf | 1 + modules/unistdio/ulc-vasnprintf | 1 + modules/vasnprintf | 1 + modules/vasnwprintf | 1 + 12 files changed, 42 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80f6503b16..bf52c82001 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2023-07-16 Bruno Haible + + vasnprintf, vasnwprintf: Optimize clearing an mbstate_t. + * lib/vasnprintf.c (VASNPRINTF): Use mbszero. + * modules/vasnprintf (Depends-on): Add mbszero. + * modules/vasnwprintf (Depends-on): Likewise. + * modules/c-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. + * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. + * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. + 2023-07-16 Bruno Haible mbmemcasecoll: Optimize clearing an mbstate_t. diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c index 9ad31b2a08..2d9aa977ec 100644 --- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -83,7 +83,7 @@ #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ -#include /* mbstate_t, mbrtowc(), mbrlen(), wcrtomb() */ +#include /* mbstate_t, mbrtowc(), mbrlen(), wcrtomb(), mbszero() */ #include /* errno */ #include /* CHAR_BIT, INT_WIDTH, LONG_WIDTH */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ @@ -3007,7 +3007,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif arg_end = arg; characters = 0; @@ -3035,7 +3035,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, characters. */ # if HAVE_MBRTOWC mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif arg_end = arg; characters = 0; @@ -3079,7 +3079,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, size_t remaining; # if HAVE_MBRTOWC mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) @@ -3105,7 +3105,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, { # if HAVE_MBRTOWC mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif while (arg < arg_end) { @@ -3157,7 +3157,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif arg_end = arg; characters = 0; @@ -3190,7 +3190,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif arg_end = arg; characters = 0; @@ -3230,7 +3230,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif for (remaining = characters; remaining > 0; ) { @@ -3299,7 +3299,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) @@ -3325,7 +3325,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif while (arg < arg_end) { @@ -3430,7 +3430,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); @@ -3456,7 +3456,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); @@ -3512,7 +3512,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif count = local_wcrtomb (result + length, arg, &state); @@ -3530,7 +3530,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); @@ -3604,7 +3604,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, mbstate_t state; wchar_t wc; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); int count = mbrtowc (&wc, &arg, 1, &state); if (count < 0) /* Invalid or incomplete multibyte character. */ @@ -6602,7 +6602,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, wide character array. */ mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); tmpdst_len = 0; { const TCHAR_T *src = tmpsrc; @@ -6626,7 +6626,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, if (tmpdst == NULL) goto out_of_memory; - memset (&state, '\0', sizeof (mbstate_t)); + mbszero (&state); { DCHAR_T *destptr = tmpdst; const TCHAR_T *src = tmpsrc; diff --git a/modules/c-vasnprintf b/modules/c-vasnprintf index 7ccd83c82e..614e8346a7 100644 --- a/modules/c-vasnprintf +++ b/modules/c-vasnprintf @@ -42,6 +42,7 @@ xsize errno memchr multiarch +mbszero configure.ac: AC_REQUIRE([AC_C_RESTRICT]) diff --git a/modules/unistdio/u16-u16-vasnprintf b/modules/unistdio/u16-u16-vasnprintf index a6fd0ac0fa..09a1c55545 100644 --- a/modules/unistdio/u16-u16-vasnprintf +++ b/modules/unistdio/u16-u16-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/u16-vasnprintf b/modules/unistdio/u16-vasnprintf index 58117892ef..bd5b525f79 100644 --- a/modules/unistdio/u16-vasnprintf +++ b/modules/unistdio/u16-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/u32-u32-vasnprintf b/modules/unistdio/u32-u32-vasnprintf index bda4dab407..c2a975da87 100644 --- a/modules/unistdio/u32-u32-vasnprintf +++ b/modules/unistdio/u32-u32-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/u32-vasnprintf b/modules/unistdio/u32-vasnprintf index 50168e371c..bff21f35ce 100644 --- a/modules/unistdio/u32-vasnprintf +++ b/modules/unistdio/u32-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/u8-u8-vasnprintf b/modules/unistdio/u8-u8-vasnprintf index 18f6e07a36..07124cc6cb 100644 --- a/modules/unistdio/u8-u8-vasnprintf +++ b/modules/unistdio/u8-u8-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/u8-vasnprintf b/modules/unistdio/u8-vasnprintf index e71fb2f16c..69e52ecf9f 100644 --- a/modules/unistdio/u8-vasnprintf +++ b/modules/unistdio/u8-vasnprintf @@ -48,6 +48,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/unistdio/ulc-vasnprintf b/modules/unistdio/ulc-vasnprintf index 8b43a8488a..e535d18985 100644 --- a/modules/unistdio/ulc-vasnprintf +++ b/modules/unistdio/ulc-vasnprintf @@ -46,6 +46,7 @@ free-posix memchr multiarch assert-h +mbszero configure.ac: gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS diff --git a/modules/vasnprintf b/modules/vasnprintf index c87fe7a106..b436430520 100644 --- a/modules/vasnprintf +++ b/modules/vasnprintf @@ -33,6 +33,7 @@ errno memchr assert-h wchar +mbszero configure.ac: AC_REQUIRE([AC_C_RESTRICT]) diff --git a/modules/vasnwprintf b/modules/vasnwprintf index 70f3fb2c95..67143e7455 100644 --- a/modules/vasnwprintf +++ b/modules/vasnwprintf @@ -37,6 +37,7 @@ errno memchr assert-h wchar +mbszero mbrtowc wmemcpy wmemset -- 2.39.5