This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Correctly handle %p in wprintf
- From: Andreas Schwab <schwab at linux-m68k dot org>
- To: libc-alpha at sourceware dot org
- Date: Thu, 01 May 2014 16:08:10 +0200
- Subject: [PATCH] Correctly handle %p in wprintf
- Authentication-results: sourceware.org; auth=none
[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.
---
stdio-common/tstdiomisc.c | 19 +++++++++++++++++++
stdio-common/vfprintf.c | 3 ++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index 5a25ecc..2e0663a 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -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;
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index f7e5f61..c4ff833 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -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); \
} \
} \
--
1.9.2
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."