[rtems commit] Use uint32_t instead of long. Use unsigned defines ( Prevent overflows on 16bit targets)
Ralf Corsepius
ralf.corsepius at rtems.org
Wed Apr 17 15:15:02 UTC 2013
On 04/17/2013 02:53 PM, Sebastian Huber wrote:
> On 04/17/2013 12:19 PM, Ralf Corsepius wrote:
> [...]
>> @@ -147,8 +147,8 @@ static uint32_t simple_random(uint32_t v)
>>
>> static unsigned get_bucket_with_random(unsigned count, long random)
>> {
>> - long unsigned unit = (1U << 31) / count;
>> - long unsigned bucket = (long unsigned) random / unit;
>> + uint32_t unit = ((uint32_t) 1U << 31) / count;
>> + uint32_t bucket = (uint32_t) random / unit;
>>
>> if (bucket != count) {
>> return bucket;
>
> A long must be able to store a 32-bit integer so there is no need to use
> uint32_t here.
Such is theory - Realty is different.
The assumptions of long >= 32 bit only applies to POSIX conformant targets.
RTEMS however supports targets, which are not strictly POSIX compliant,
where longs are 16bit => The code above fails to compile the code above
when using longs.
Ralf
More information about the devel
mailing list