Re: printk %0*X is broken.

From: Frederic Weisbecker
Date: Wed May 06 2009 - 12:11:34 EST


On Wed, May 06, 2009 at 04:30:21PM +0800, Li Zefan wrote:
> Ingo Molnar wrote:
> > Cc:-ed more folks who modified lib/vsprintf.c recently.
> >
> > Ingo
> >
> > * Yinghai Lu <yinghai@xxxxxxxxxx> wrote:
> >
> >> it seems someone broke
> >>
> >> printk( "%0*X\n", width, x);
> >>
> >> looks like 0 is dumped.
> >>
> >> YH
> >>
> >> [ 0.000000] MTRR variable ranges enabled:
> >> [ 0.000000] 0 base 0 00000000 mask FF0 00000000 write-back
> >> [ 0.000000] 1 base 10 00000000 mask FFF 80000000 write-back
> >> [ 0.000000] 2 base 0 80000000 mask FFF 80000000 uncachable
> >> [ 0.000000] 3 base 0 7F800000 mask FFF FF800000 uncachable
> >>
>
> 2.6.30-rc4-tip, the output of my box:
>
> high_width: 1
> MTRR variable ranges enabled:
> 0 base 000000000 mask FC0000000 write-back
> 1 base 03C000000 mask FFC000000 uncachable
> 2 base 0D0000000 mask FF8000000 write-combining
>
> Is it possible that high_width is negative in your output?
> If high_width == -3, we can get exactly the same output with yours.


Indeed, a negative value given as the width will actually pad to the
right (reverse width forcing).
If you have -3, that matches the normal printf behaviour.

Yinghai, could you check please if that's the case for you?

Thanks,

Frederic.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/