From: Grant Likely Date: Wed, 25 Apr 2012 01:03:55 +0000 (+1000) Subject: vsprintf: correctly handle width when '#' flag used in %#p format. X-Git-Tag: next-20120430~2^2~91 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=27d1d5729d3ccb7076c2798eba91c47612e0a23d;p=karo-tx-linux.git vsprintf: correctly handle width when '#' flag used in %#p format. needs decent changelog! Signed-off-by: Grant Likely Signed-off-by: Andrew Morton --- diff --git a/lib/vsprintf.c b/lib/vsprintf.c index abbabec9720a..1043827c3583 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -866,13 +866,15 @@ static noinline_for_stack char *pointer(const char *fmt, char *buf, char *end, void *ptr, struct printf_spec spec) { + int default_width = 2 * sizeof(void*) + (spec.flags & SPECIAL ? 2 : 0); + if (!ptr && *fmt != 'K') { /* * Print (null) with the same width as a pointer so it makes * tabular output look nice. */ if (spec.field_width == -1) - spec.field_width = 2 * sizeof(void *); + spec.field_width = default_width; return string(buf, end, "(null)", spec); } @@ -927,7 +929,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, */ if (in_irq() || in_serving_softirq() || in_nmi()) { if (spec.field_width == -1) - spec.field_width = 2 * sizeof(void *); + spec.field_width = default_width; return string(buf, end, "pK-error", spec); } if (!((kptr_restrict == 0) || @@ -944,7 +946,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, } spec.flags |= SMALL; if (spec.field_width == -1) { - spec.field_width = 2 * sizeof(void *); + spec.field_width = default_width; spec.flags |= ZEROPAD; } spec.base = 16;