Date: Mon, 6 Aug 2001 00:16:56 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Mike Barcroft <mike@FreeBSD.org> Cc: <audit@FreeBSD.org> Subject: Re: cmp(1) warns patch Message-ID: <20010805235106.Y27651-100000@besplex.bde.org> In-Reply-To: <20010804144439.A8069@coffee.q9media.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 4 Aug 2001, Mike Barcroft wrote: > On Sat, Aug 04, 2001 at 12:59:56PM +1000, Bruce Evans wrote: > > On Fri, 3 Aug 2001, Mike Barcroft wrote: > > > ... > > > Index: cmp/regular.c > > > =================================================================== > > > RCS file: /home/ncvs/src/usr.bin/cmp/regular.c,v > > > retrieving revision 1.10 > > > diff -u -r1.10 regular.c > > > --- cmp/regular.c 2000/06/20 20:28:40 1.10 > > > +++ cmp/regular.c 2001/08/04 01:02:33 > > > ... > > > @@ -81,7 +81,7 @@ > > > off2 = ROUNDPAGE(skip2); > > > > > > length = MIN(len1, len2); > > > - if (length > SIZE_T_MAX) > > > + if (length > (off_t)SIZE_T_MAX) > > > > This is broken on many machines, including alphas. On alphas, > > (off_t)SIZE_MAX overflows to -1, so `length' is always larger and the > > pessimized cspecial() method is always used. > ... > I guess I should have looked at the types a little more closely. Do > you have any suggestions for overcoming the comparison between signed > and unsigned warning on alpha? None very good. In general, the signed type must be promoted to a suitable unsigned type, but to do that you have to know too much about the signed type if that type is a typedefed type. Here we can't do anything better than promote to "unsigned long long". This assumes that "unsigned long long" can represent all possible file sizes. In the kernel, we could use uoff_t. I introduced uoff_t because promoting off_t's to an unsigned type is useful in other contexts. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010805235106.Y27651-100000>