cvs commit: src/sys/dev/en midway.c
Bruce Evans
bde at zeta.org.au
Thu Aug 7 05:59:44 PDT 2003
> On Wed, 6 Aug 2003, Andrew Gallatin wrote:
>
> AG>Hartmut Brandt [harti at 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
More information about the cvs-src
mailing list