[PATCH 19/23] rtems-rfs-buffer.c: Correct printf() format specifiers to eliminate warnings

Joel Sherrill joel.sherrill at oarcorp.com
Thu Sep 4 20:01:46 UTC 2014


On 9/4/2014 11:21 AM, Gedare Bloom wrote:
> On Wed, Sep 3, 2014 at 11:26 AM, Joel Sherrill
> <joel.sherrill at oarcorp.com> wrote:
>> ---
>>  cpukit/libfs/src/rfs/rtems-rfs-buffer.c | 5 ++---
>>  1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/cpukit/libfs/src/rfs/rtems-rfs-buffer.c b/cpukit/libfs/src/rfs/rtems-rfs-buffer.c
>> index 3d89f5f..4192b21 100644
>> --- a/cpukit/libfs/src/rfs/rtems-rfs-buffer.c
>> +++ b/cpukit/libfs/src/rfs/rtems-rfs-buffer.c
>> @@ -52,13 +52,12 @@ rtems_rfs_scan_chain (rtems_chain_control*   chain,
>>      buffer = (rtems_rfs_buffer*) node;
>>
>>      if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
>> -      printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
>> +      printf ("%p ", buffer->user);
>>
>>      if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
>>      {
>>        if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
>> -        printf (": found block=%" PRIuPTR "\n",
>> -                ((intptr_t)(buffer->user)));
>> +        printf (": found block=%p\n", buffer->user);
> What is the warning this fixed? The "PRIuPTR" should be the right way
> to print an (unsigned) pointer. Perhaps changing the cast to
> (uintptr_t) would fix the warning?
log/moxie-moxiesim.log:../../../../../../rtems/c/src/../../cpukit/libfs/src/rfs/rtems-rfs-buffer.c:55:7:
warning: format '%u' expects argument of type 'unsigned int', but
argument 2 has type 'long int' [-Wformat=]
log/moxie-moxiesim.log:../../../../../../rtems/c/src/../../cpukit/libfs/src/rfs/rtems-rfs-buffer.c:55:7:
warning: format '%u' expects argument of type 'unsigned int', but
argument 2 has type 'long int' [-Wformat=]
log/moxie-moxiesim.log:../../../../../../rtems/c/src/../../cpukit/libfs/src/rfs/rtems-rfs-buffer.c:61:17:
warning: format '%u' expects argument of type 'unsigned int', but
argument 2 has type 'long int' [-Wformat=]
log/moxie-moxiesim.log:../../../../../../rtems/c/src/../../cpukit/libfs/src/rfs/rtems-rfs-buffer.c:61:17:
warning: format '%u' expects argument of type 'unsigned int', but
argument 2 has type 'long int' [-Wformat=]

This seems to have happened on bfin, h8300, i386, m32r, m68k and moxie.

Casting it to a uintptr_t on moxie change it to this:

../../../../../../rtems/c/src/../../cpukit/libfs/src/rfs/rtems-rfs-buffer.c:55:7:
warning: format '%u' expects argument of type 'unsigned int', but
argument 2 has type 'long unsigned int' [-Wformat=]
       printf ("%" PRIuPTR " ", ((uintptr_t) buffer->user));

Checking the preprocessor output, I see:

typedef long int __intptr_t;
typedef long unsigned int __uintptr_t;


inttypes.h has this:

#if PTRDIFF_MAX <= __INTTYPES_EXP(INT_MAX)
# define __PRIPTR(x) __STRINGIFY(x)
# define __SCNPTR(x) __STRINGIFY(x)
#elif PTRDIFF_MAX <= __INTTYPES_EXP(LONG_MAX) || !defined(__have_longlong64)
...

I checked PTRDIFF_MAX and INT_MAX and they are equal.  They
are also equal on arm-rtems4.11-gcc which does not produce this
warning.

I changed that to a < (not <=), the format became "%lu",
 and the warning went away.

Checking Linux on Centos, it is lu if 32 bit and llu if 64 bit.

The RTEMS inttypes.h is unique to us. I am wondering if
changing the <= on both those checks is desirable. 

This could just be a bug in inttypes.h


Any thoughts?

>>        (*count)--;
>>        rtems_chain_extract_unprotected (node);
>> --
>> 1.9.3
>>
>> _______________________________________________
>> devel mailing list
>> devel at rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the devel mailing list