Re: [resend][PATCH] avoid signed vs unsigned comparison in efi_range_is_wc()

From: Arnd Bergmann
Date: Thu Jun 16 2005 - 16:38:10 EST


On Dunnersdag 16 Juni 2005 23:07, Jesper Juhl wrote:
> >
> > Well long and int are the same size on ix86. What you really need
> > is 'size_t' for counters. That's the largest unsigned integer that
> > will fit in a register on the target platform. It is platform-
> > specific, therefore defined in stddef.h. No index or return-value
> > is supposed to be larger than what can be represented in size_t,
> > therefore it is a good type to use.
> >
> > Note that on 64-bit platforms, size_t will be larger than an unsigned
> > int. This is good.
> >
> Good info, thanks Richard.

Actually not that good. size_t is meant to represent the size of a structure
or array in units of characters. It also happens to be the same size as an
integer register on all architectures that Linux supports, just like unsigned
long.

The most common convention in the kernel is to use 'unsigned long' for
every integer that needs to be as large as possible without the overhead
of strict 64 bit types (like here), and also for integer values that need
to be the same size as a pointer.

OTOH size_t should be used only to count bytes, like in standard C usage.

Arnd <><
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/