Source-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/lib/libkern
On Tue, Mar 28, 2006 at 06:07:18PM +0000, Christos Zoulas wrote:
> >
> >How about casting the result to 'int' ?
> >The domain of the result will always fit in an int, whereas sizeof
> >will return a 64bit type on LP64 systems.
> >Using 'int' (not 'unsigned int') allows:
> > int i;
> > ...
> > for (i = 0; i < __arraycount(xxx); i++)
> > ...
> >work (without giving a 'signed v unsigned comparison' warning).
> >
>
> This is wrong given that the number is unsigned. Although it fits in
> an int, it does not make it signed. You should be converting your
> loops to use u_int or size_t instead.
But the domain of the value will fit in an 'int' (we aren't going to
have arrays with > 2^31 elements, nor a port where int is less than
32 bits).
Having __arraycount() return int is much less likely to introduce bugs - eg
those caused by comparisons of the loop control variable for < 0.
We also just don't want the bloat that would happen if the loop control
variable becomes a 64bit variable.
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index