Bug#247436: libc6-dev: odd dev_t/varargs behavior
Andres Salomon <dilinger@voxel.net> wrote:
> Package: libc6-dev
> Version: 2.3.2.ds1-12
> Severity: normal
>
> I'm seeing some very odd behavior with dev_t (defined in linux/kdev_t.h)
> and varargs. I have the following source file:
>
> #include <stdio.h>
> #include <sys/types.h>
> #include <linux/kdev_t.h>
>
> int main(void)
> {
> dev_t x = 0x3af;
> printf("%x %x\n", ((x)>>8), ((x)&0xff));
> return 0;
> }
>
>
> One would think that this would print out "3 af"; however, it displays
> "3 0". If I change that printf to:
> printf("%x %x %x\n", ((x)>>8), ((x)&0xff));
Please review the C promotion rules.
The 2nd and 3rd arguments are 64-bits long, and therefore they get pushed
onto the stack as 64-bit values. Your use of the %x conversion is
therefore incorrect.
In fact, gcc -Wall should've told you about it.
--
Debian GNU/Linux 3.0 is out! ( http://www.debian.org/ )
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Reply to: