]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
vsprintf: correctly handle width when '#' flag used in %#p format.
authorGrant Likely <grant.likely@secretlab.ca>
Wed, 25 Apr 2012 01:03:55 +0000 (11:03 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Mon, 30 Apr 2012 05:17:30 +0000 (15:17 +1000)
needs decent changelog!

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/vsprintf.c

index abbabec9720a1947ffa5364ae9aab9ec9696ecfe..1043827c3583a7eaebe42518a5fcb72ec544e46a 100644 (file)
@@ -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;