From owner-freebsd-audit Sun Aug 5 7:19:34 2001 Delivered-To: freebsd-audit@freebsd.org Received: from mailman.zeta.org.au (mailman.zeta.org.au [203.26.10.16]) by hub.freebsd.org (Postfix) with ESMTP id 63AD237B401; Sun, 5 Aug 2001 07:19:31 -0700 (PDT) (envelope-from bde@zeta.org.au) Received: from bde.zeta.org.au (bde.zeta.org.au [203.2.228.102]) by mailman.zeta.org.au (8.9.3/8.8.7) with ESMTP id AAA18232; Mon, 6 Aug 2001 00:19:28 +1000 Date: Mon, 6 Aug 2001 00:16:56 +1000 (EST) From: Bruce Evans X-X-Sender: To: Mike Barcroft Cc: Subject: Re: cmp(1) warns patch In-Reply-To: <20010804144439.A8069@coffee.q9media.com> Message-ID: <20010805235106.Y27651-100000@besplex.bde.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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