mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-18 22:50:07 +00:00
(process_arg): Correct %ls handling wrt to precision.
This commit is contained in:
parent
81aee4d8d7
commit
c608b3cd86
@ -915,20 +915,31 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
mbstate_t mbstate; \
|
||||
\
|
||||
memset (&mbstate, '\0', sizeof (mbstate_t)); \
|
||||
len = __wcsrtombs (NULL, &s2, 0, &mbstate); \
|
||||
\
|
||||
if (prec > 0) \
|
||||
{ \
|
||||
/* The string `s2' might not be NUL terminated. */ \
|
||||
string = (char *) alloca (prec + 1); \
|
||||
len = __wcsrtombs (string, &s2, prec + 1, &mbstate); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
len = __wcsrtombs (NULL, &s2, 0, &mbstate); \
|
||||
if (len != (size_t) -1) \
|
||||
{ \
|
||||
assert (__mbsinit (&mbstate)); \
|
||||
s2 = (const wchar_t *) string; \
|
||||
string = (char *) alloca (len + 1); \
|
||||
(void) __wcsrtombs (string, &s2, len + 1, &mbstate); \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
if (len == (size_t) -1) \
|
||||
{ \
|
||||
/* Illegal wide-character string. */ \
|
||||
done = -1; \
|
||||
goto all_done; \
|
||||
} \
|
||||
\
|
||||
assert (__mbsinit (&mbstate)); \
|
||||
s2 = (const wchar_t *) string; \
|
||||
string = alloca (len + 1); \
|
||||
(void) __wcsrtombs (string, &s2, len + 1, &mbstate); \
|
||||
if (prec < len) \
|
||||
len = prec; \
|
||||
} \
|
||||
\
|
||||
if ((width -= len) < 0) \
|
||||
|
Loading…
Reference in New Issue
Block a user