Correctly handle %p in wprintf (BZ #16890)

This commit is contained in:
Andreas Schwab 2014-05-01 15:50:27 +02:00
parent 0cdddc25a4
commit 4fdfe821e2
4 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2014-05-01 Andreas Schwab <schwab@linux-m68k.org>
[BZ #16890]
* stdio-common/vfprintf.c (process_arg) [%p]: Mark string as wide
when compiling wprintf.
* stdio-common/tstdiomisc.c (t3): New function.
(main): Call it.
2014-05-01 Steve Ellcey <sellcey@mips.com>
* intl/iconv/skeleton.c (ONE_DIRECTION): Remove define.

2
NEWS
View File

@ -16,7 +16,7 @@ Version 2.20
16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713,
16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770,
16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, 16831, 16838,
16854, 16888.
16854, 16888, 16890.
* The minimum Linux kernel version that this version of the GNU C Library
can be used with is 2.6.32.

View File

@ -46,6 +46,24 @@ t2 (void)
return result;
}
static int
t3 (void)
{
char buf[80];
wchar_t wbuf[80];
int result = 0;
int retval;
retval = sprintf (buf, "%p", (char *) NULL);
result |= retval != 5 || strcmp (buf, "(nil)") != 0;
retval = swprintf (wbuf, sizeof (wbuf) / sizeof (wbuf[0]),
L"%p", (char *) NULL);
result |= retval != 5 || wcscmp (wbuf, L"(nil)") != 0;
return result;
}
volatile double qnanval;
volatile long double lqnanval;
/* A sNaN is only guaranteed to be representable in variables with static (or
@ -243,6 +261,7 @@ main (int argc, char *argv[])
result |= t1 ();
result |= t2 ();
result |= t3 ();
result |= F ();
result |= fflush (stdout) == EOF;

View File

@ -936,7 +936,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
/* Make sure the full string "(nil)" is printed. */ \
if (prec < 5) \
prec = 5; \
is_long = 0; /* This is no wide-char string. */ \
/* This is a wide string iff compiling wprintf. */ \
is_long = sizeof (CHAR_T) > 1; \
goto LABEL (print_string); \
} \
} \