From: Bruno Haible Date: Wed, 19 Jun 2024 13:20:21 +0000 (+0200) Subject: vasnwprintf: Optimize handling of %c directive. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=0afe83a73f4dcd3f5c8ba411ece2c6a27ea26e67;p=gnulib.git vasnwprintf: Optimize handling of %c directive. * lib/vasnprintf.c (VASNPRINTF): Use a single ENSURE_ALLOCATION instead of two. --- diff --git a/ChangeLog b/ChangeLog index 34e01291ae..0f89dacf4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024-06-19 Bruno Haible + + vasnwprintf: Optimize handling of %c directive. + * lib/vasnprintf.c (VASNPRINTF): Use a single ENSURE_ALLOCATION instead + of two. + 2024-06-19 Bruno Haible u*-vasnprintf: Fix a rare memory leak. diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c index ed2052c0ae..1838ded22d 100644 --- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -3708,24 +3708,26 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, /* Invalid or incomplete multibyte character. */ goto fail_with_EILSEQ; - if (1 < width && !(flags & FLAG_LEFT)) - { - size_t n = width - 1; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } + { + size_t total = (1 < width ? width : 1); + ENSURE_ALLOCATION (xsum (length, total)); + + if (1 < width && !(flags & FLAG_LEFT)) + { + size_t n = width - 1; + DCHAR_SET (result + length, ' ', n); + length += n; + } - ENSURE_ALLOCATION (xsum (length, 1)); - result[length++] = wc; + result[length++] = wc; - if (1 < width && (flags & FLAG_LEFT)) - { - size_t n = width - 1; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } + if (1 < width && (flags & FLAG_LEFT)) + { + size_t n = width - 1; + DCHAR_SET (result + length, ' ', n); + length += n; + } + } } } #endif