mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
[BZ #2509]
* stdio-common/vfprintf.c (process_arg): Fix reading of signed short and byte values from parameter list. * stdio-common/tst-printf.c (main): Add more tests. * stdio-common/tst-printf.sh: Adjust for tst-printf.c change.
This commit is contained in:
@@ -530,14 +530,24 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
{ \
|
||||
if (is_long_num) \
|
||||
signed_number = va_arg (ap, long int); \
|
||||
else /* `char' and `short int' will be promoted to `int'. */ \
|
||||
else if (is_char) \
|
||||
signed_number = (signed char) va_arg (ap, unsigned int); \
|
||||
else if (!is_short) \
|
||||
signed_number = va_arg (ap, int); \
|
||||
else \
|
||||
signed_number = (short int) va_arg (ap, unsigned int); \
|
||||
} \
|
||||
else \
|
||||
if (is_long_num) \
|
||||
signed_number = args_value[fspec->data_arg].pa_long_int; \
|
||||
else /* `char' and `short int' will be promoted to `int'. */ \
|
||||
else if (is_char) \
|
||||
signed_number = (signed char) \
|
||||
args_value[fspec->data_arg].pa_u_int; \
|
||||
else if (!is_short) \
|
||||
signed_number = args_value[fspec->data_arg].pa_int; \
|
||||
else \
|
||||
signed_number = (short int) \
|
||||
args_value[fspec->data_arg].pa_u_int; \
|
||||
\
|
||||
is_negative = signed_number < 0; \
|
||||
number.word = is_negative ? (- signed_number) : signed_number; \
|
||||
|
Reference in New Issue
Block a user