Re: [current tinderbox] failure on amd64/amd64

From: Bill Paul <wpaul_at_FreeBSD.ORG>
Date: Thu, 5 May 2005 19:39:20 +0000 (GMT)
> On Thu, 5 May 2005, Bill Paul wrote:
> 
> >> On Thu, 5 May 2005, Xin LI wrote:
> >>
> >>> On Thu, May 05, 2005 at 04:44:28AM -0400, FreeBSD Tinderbox wrote:
> >>>> /tinderbox/CURRENT/amd64/amd64/src/sys/modules/ndis/../../compat/ndis/subr_ndis.c: In function `NdisMFreeSharedMemory':
> >>>> /tinderbox/CURRENT/amd64/amd64/src/sys/modules/ndis/../../compat/ndis/subr_ndis.c:1710: warning: long long unsigned int format, uint64_t arg (arg 3)
> >>>
> >>> Maybe we should make use of the PRIx64 macro?  (see patch attached)
> >>
> >> No.  PRI* is a bug in C99; it should never be used.  Just cast the arg to
> >> a suitable larger type with a known format (uintmax_t here).  (C99 is
> >> missing support for better ways; either %I as in sfio (?) or %DWIM where
> >> the compiler rewrites the string to match the arg would be better.)
> >
> > I think what you really meant to say was:
> >
> > "Use %jx instead of %qx."
> >
> > Am I right?
> 
> No, the arg must match the format.  %jx matches uintmax_t, but the arg has
> type uint64_t.  uint64_t just happens to be the same as uintmax_t on all
> supported machines, so using %jx without casting the arg to match gives a
> latent bug.
> 
> Bruce

So what you really, _really_ meant to say was:

"Cast the argument to uintmax_t _and_ use %jx instead of %qx."

Am I right?

-Bill

--
=============================================================================
-Bill Paul            (510) 749-2329 | Senior Engineer, Master of Unix-Fu
                 wpaul_at_windriver.com | Wind River Systems
=============================================================================
              <adamw> you're just BEGGING to face the moose
=============================================================================
Received on Thu May 05 2005 - 17:39:20 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:34 UTC