[PATCH] tcp.c: elimiate warining "format '%ld', but argument has type 'ssize_t'

Frank Cusack fcusack at fcusack.com
Mon Feb 1 22:17:56 CET 2010


On February 1, 2010 8:39:25 PM +0100 Alan DeKok <aland at deployingradius.com> 
wrote:
> Frank Cusack wrote:
>> Yup.  If anything, the patch should use the inttypes.h specifiers
>> (PRId32 et al), not changing from one platform-specific format
>> to another.  Well I'm assuming that packet->data_len is a fixed-size
>> type like int32.  If it is in fact a long than %ld is correct,
>> ovbiously.
>
>   I took a look... it's size_t.  Which is 0-4K for any RADIUS packet.
>
>   The "portable" fix is to change %ld to %d, and to add an explicit
> cast: (int) packet->data_len.

There is a size_t printf format specifier.  %z I think.  Barring that,
since size_t is probably "at least" 32 bits and int is only guaranteed
to be 16 bits, and also since size_t is unsigned, the more correct fix
would be casting to unsigned long.  But %z if that is correct is better.

-frank



More information about the Freeradius-Devel mailing list