Hi, The padding code of lib/vasnprintf.c "forgets" to do zero-padding in the Unicode-enabled *printf variants and on mingw. This fixes it.
2008-02-06 Bruno Haible <[EMAIL PROTECTED]> Fix bug introduced on 2007-06-10. * lib/vasnprintf.c (VASNPRINTF): Perform zero-padding also if !NEED_PRINTF_FLAG_ZERO. *** lib/vasnprintf.c.orig 2008-02-06 23:52:15.000000000 +0100 --- lib/vasnprintf.c 2008-02-06 23:52:03.000000000 +0100 *************** *** 4535,4549 **** # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; - # if NEED_PRINTF_FLAG_ZERO DCHAR_T *pad_ptr; ! # if !DCHAR_IS_TCHAR if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else ! # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ --- 4535,4548 ---- # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; ! # if !DCHAR_IS_TCHAR if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else ! # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ *************** *** 4551,4557 **** || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } - # endif /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ --- 4550,4555 ---- *************** *** 4564,4570 **** for (; pad > 0; pad--) *p++ = ' '; } - # if NEED_PRINTF_FLAG_ZERO else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ --- 4562,4567 ---- *************** *** 4575,4581 **** for (; pad > 0; pad--) *p++ = '0'; } - # endif else { /* Pad with spaces on the left. */ --- 4572,4577 ----