[PATCH] MTD: fix printk format warning

Randy.Dunlap randy.dunlap at oracle.com
Tue Oct 24 11:29:31 EDT 2006


Ben Dooks wrote:
> On Tue, Oct 24, 2006 at 12:24:10PM +0300, Artem Bityutskiy wrote:
>> On Mon, 2006-10-23 at 21:48 -0700, Randy Dunlap wrote:
>>> (may be a gcc phenomenon)
>>> Fix printk format warning:
>>> drivers/mtd/maps/physmap.c:93: warning: long long unsigned int format, long unsigned int arg (arg 2)
>>>
>>> Signed-off-by: Randy Dunlap <randy.dunlap at oracle.com>
>> ... snip ...
>>
>>>       	printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n",
>>> -	    (unsigned long long)dev->resource->end - dev->resource->start + 1,
>>> +	    (unsigned long long)(dev->resource->end - dev->resource->start + 1),
>>>  	    (unsigned long long)dev->resource->start);
>> Hmm, AFAIK
>>
>> "(unsigned long) dev->resource->end - dev->resource->start + 1" should 
> 
> I thought that 'z' was the modifier to %x for resources?

Maybe you are thinking of 'z' for use with size_t ?  From the C99 spec:

z  Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
size_t or the corresponding signed integer type argument; or that a
following n conversion specifier applies to a pointer to a signed integer type
corresponding to size_t argument.  But a resource_size_t is not a size_t.
Depending on CONFIG, it's either:

#ifdef CONFIG_RESOURCES_64BIT
typedef u64 resource_size_t;
#else
typedef u32 resource_size_t;
#endif

which I suppose is what Artem missed.  I.e., it's not always unsigned long.
However, I won't deny that gcc seems odd here.

-- 
~Randy




More information about the linux-mtd mailing list