> vasnwprintf: Fix test failure on NetBSD. > * lib/vasnprintf.c (THOUSEP_MAXLEN): Correct value.
There are about 10 different cases regarding THOUSEP_WCHAR_MAXLEN vs. THOUSEP_CHAR_MAXLEN. I reviewed them: 2026-07-14 Bruno Haible <[email protected]> vasnprintf, vasnwprintf: Revisit THOUSEP_MAXLEN. * lib/vasnprintf.c (THOUSEP_MAXLEN): Add comment. (VASNPRINTF): Don't use THOUSEP_MAXLEN here. diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c index dd54b29427..750601cfb2 100644 --- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -1882,7 +1882,21 @@ is_borderline (const char *digits, size_t precision) /* Maximum number of units needed for a thousands separator, in the code that creates a temporary unit sequence of length - MAX_ROOM_NEEDED (...). */ + MAX_ROOM_NEEDED (...). + The tight bound is + (!USE_SNPRINTF && !group_ourselves + ? THOUSEP_CHAR_MAXLEN + : (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR + ? THOUSEP_WCHAR_MAXLEN + : THOUSEP_CHAR_MAXLEN)) + But since group_ourselves is not known until runtime, we can only use this + upper bound: + (!USE_SNPRINTF + ? THOUSEP_CHAR_MAXLEN + : (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR + ? THOUSEP_WCHAR_MAXLEN + : THOUSEP_CHAR_MAXLEN)) + */ #if USE_SNPRINTF && (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) # define THOUSEP_MAXLEN THOUSEP_WCHAR_MAXLEN #else @@ -5012,7 +5026,11 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, { /* A thousands separator needs to be inserted at most every 2 digits. This is the case in the ta_IN locale. */ - tmp_length = xsum (tmp_length, tmp_length / 2 * THOUSEP_MAXLEN); +# if WIDE_CHAR_VERSION + tmp_length = xsum (tmp_length, tmp_length / 2 * THOUSEP_WCHAR_MAXLEN); +# else + tmp_length = xsum (tmp_length, tmp_length / 2 * THOUSEP_CHAR_MAXLEN); +# endif } /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12);
