Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Sep 2001 18:53:50 +0300
From:      Ruslan Ermilov <ru@FreeBSD.ORG>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        Mike Barcroft <mike@FreeBSD.ORG>, audit@FreeBSD.ORG
Subject:   Re: cmp(1) warns patch
Message-ID:  <20010914185350.B52001@sunbay.com>
In-Reply-To: <20010805235106.Y27651-100000@besplex.bde.org>; from bde@zeta.org.au on Mon, Aug 06, 2001 at 12:16:56AM %2B1000
References:  <20010804144439.A8069@coffee.q9media.com> <20010805235106.Y27651-100000@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On Mon, Aug 06, 2001 at 12:16:56AM +1000, Bruce Evans wrote:
> 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.
> 
It would be great if we had the "largest [un]signed int type" typedef'ed
somehow to make such conversions possible.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

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?20010914185350.B52001>