[PATCH] Use PRId32/PRIx32 from inttypes.h for printf of CARD32 values.

Adam Jackson ajax at nwnk.net
Mon Oct 5 12:41:05 PDT 2009


On Sun, 2009-10-04 at 06:57 -0400, Thomas Dickey wrote:
> On Sun, 4 Oct 2009, Mark Kettenis wrote:
> >>> @@ -219,7 +219,7 @@ port_rep_inb(xf86Int10InfoPtr pInt,
> >>>      register int inc =3D d_f ? -1 : 1;
> >>>      CARD32 dst =3D base;
> >>>      if (PRINT_PORT && DEBUG_IO_TRACE())
> >>> -	ErrorF(" rep_insb(%#x) %ld bytes at %8.8lx %s\n",
> >>> +	ErrorF(" rep_insb(%#x) %" PRId32 " bytes at %8.8" PRIx32 " %s\n",
> >>>  		port, count, base, d_f ? "up" : "down");
> >>>      while (count--) {
> >>>  	MEM_WB(pInt, dst, x_inb(port));
> >>
> >> Is this portable beyond glibc? Alan? Matthieu?
> >
> > The PRId32 and PRIx32 defines are part of C99.
> >
> > That said, the consensus among many groups of developers is that they
> > are ugly, make the code harder to read and can be easily avoided by
> > using appropriate casts.
> 
> beyond being merely ugly, different versions of gcc give warnings for
> combinations that are quiet in other versions of gcc.

The problem in this particular case is that there's no pretty way to
silence these warnings, because CARD32 is effectively:

#if __ILP32
typedef unsigned long CARD32;
#elif __LP64
typedef unsigned int CARD32;
#endif

Which means you'd actually need different format strings on different
architectures.  We could (should) fix this the sane way:

typedef uint32_t CARD32;

Which would then assuredly trigger more format warnings elsewhere.

- ajax
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://lists.x.org/archives/xorg-devel/attachments/20091005/833daa67/attachment.pgp 


More information about the xorg-devel mailing list