Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Aug 2003 22:59:35 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Hartmut Brandt <harti@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/en midway.c
Message-ID:  <20030807222014.B1480@gamplex.bde.org>
In-Reply-To: <20030806162837.D622@beagle.fokus.fraunhofer.de>
References:  <200308061130.h76BUrPt029894@repoman.freebsd.org> <20030806162837.D622@beagle.fokus.fraunhofer.de>

next in thread | previous in thread | raw e-mail | index | archive | help
> On Wed, 6 Aug 2003, Andrew Gallatin wrote:
>
> AG>Hartmut Brandt [harti@FreeBSD.org] wrote:
> AG>> harti       2003/08/06 04:30:53 PDT
> AG>>
> AG>>   FreeBSD src repository
> AG>>
> AG>>   Modified files:
> AG>>     sys/dev/en           midway.c
> AG>>   Log:
> AG>>   Print an array index that is computed as ptrdiff_t with %tu.
> AG>
> AG>I don't understand why, but this breaks the sparc64 and alpha tinderboxes.
> AG>See
> AG>http://docs.freebsd.org/cgi/getmsg.cgi?fetch=574500+0+current/freebsd-current
>
> Not really. The breakage was earlier when the ptrdiff_t was printed via
> %d. David O'Brien fixed that by converting to long and using %ld. The
> above commit now uses the knowledge that the difference is actually an
> array index and therefor uses %tu. The tinderbox log file seems to be from
> yesterday before David's fix.

It also uses the knowledge that the difference is non-negative.  Why not
just print the difference as it is using the natural format %td?  This
makes no difference if the, uhm, difference is non-negative, but avoids
undefined behaviour if the difference is somehow negative.

Printing -1 using %tu on i386's gives an interesting example of the
undefined behaviour that results when a negative value is printed using
an unsigned format.  I expected the result UINT_MAX (2^32-1), but the
actual result is UINTMAX_MAX (2^64-1).  This is because the implementation
represents numbers using "uintmax_t ujval" for the %tu and %td formats,
so it represents -1 as UINTMAX_MAX, and then it just prints this value.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030807222014.B1480>