Skip site navigation (1)Skip section navigation (2)
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>