Stefan Weil <w...@mail.berlios.de> writes:

> The patch fixes these gcc warnings:
>
> ./hw/es1370.c: In function ‘es1370_update_voices’:
> ./hw/es1370.c:411: error: format ‘%d’ expects type ‘int’, but argument 3 has 
> type ‘size_t’
> ./hw/es1370.c: In function ‘es1370_writel’:
> ./hw/es1370.c:579: error: format ‘%d’ expects type ‘int’, but argument 3 has 
> type ‘long int’
> ./hw/es1370.c:589: error: format ‘%d’ expects type ‘int’, but argument 3 has 
> type ‘long int’
> ./hw/es1370.c:606: error: format ‘%d’ expects type ‘int’, but argument 3 has 
> type ‘long int’
> ./hw/es1370.c: In function ‘es1370_readl’:
> ./hw/es1370.c:748: error: suggest braces around empty body in an ‘if’ 
> statement
>
> v2
>
> * Use %zd for pointer differences (ptrdiff_t or ssize_t).
>   The gcc error message ("long int") was misleading.
>   Malc, thank you for this hint.

The correct length modifier for ptrdiff_t is 't', not 'z'.
ISO/IEC 9899:1999 7.19.6.1:

       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.

       t            Specifies  that a following d, i, o, u, x, or X
                    conversion specifier applies to a ptrdiff_t  or
                    the   corresponding   unsigned   integer   type
                    argument; or  that  a  following  n  conversion
                    specifier  applies  to a pointer to a ptrdiff_t
                    argument.

Not that it makes a difference in practice.

Reply via email to