[PATCH evdev] Don't crop long value from EvdevBitIsSet.
Chase Douglas
chase.douglas at canonical.com
Wed Nov 2 18:09:45 PDT 2011
On 11/02/2011 05:13 PM, Peter Hutterer wrote:
> On Wed, Nov 02, 2011 at 02:31:33PM +0100, walter harms wrote:
>>
>>
>> Am 02.11.2011 14:15, schrieb Chase Douglas:
>>> On 11/02/2011 07:29 AM, walter harms wrote:
>>>>
>>>>
>>>> Am 02.11.2011 00:52, schrieb Peter Hutterer:
>>>>> Introduced in xf86-input-evdev-2.6.0-26-g4969389
>>>>>
>>>>> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
>>>>> ---
>>>>> Cutting long to int for the return value loses us some values, notably in
>>>>> the ABS_MT ranges.
>>>>>
>>>>> src/evdev.c | 2 +-
>>>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/src/evdev.c b/src/evdev.c
>>>>> index f593df0..6ab1a18 100644
>>>>> --- a/src/evdev.c
>>>>> +++ b/src/evdev.c
>>>>> @@ -190,7 +190,7 @@ static size_t EvdevCountBits(unsigned long *array, size_t nlongs)
>>>>>
>>>>> static inline int EvdevBitIsSet(const unsigned long *array, int bit)
>>>>> {
>>>>> - return array[bit / LONG_BITS] & (1LL << (bit % LONG_BITS));
>>>>> + return !!(array[bit / LONG_BITS] & (1LL << (bit % LONG_BITS)));
>>>>> }
>>>>>
>>>>> static inline void EvdevSetBit(unsigned long *array, int bit)
>>>>
>>>> hi,
>>>> i have never seen that !! notation. perhaps (array == 0) would be more readable and
>>>> not suprise to much people ?
>>>
>>> I would like to echo this. I actually don't know what the '!!' does
>>> here. Since this is a one-off issue, can you add a comment to explain
>>> what it is doing?
>>>
>>
>> IMHO the following happens:
>>
>> The first ! translates 0 (type long) into !0 (type int)
>> and translates !0 (type long) into 0 (type int)
>>
>> Now you have int but the logic is reversed, so you need a second !
>
> That question has come up in the past:
> http://lists.x.org/archives/xorg-devel/2010-November/015942.html
>
> for any numeric value x, !!x is the boolean equivalent of that
> numeric value, 0 for x == 0 and 1 for x != 0 (technically !0 I guess but
> practically it's 1).
>
> We're already using this in a few places, e.g. BitIsOn(). It's quite common
> with plenty of instances in e.g. mesa or the kernel (the two repos I quickly
> grepped for it).
Fair enough. I still like seeing a comment since even seasoned (at least
I'd like to think so :) developers know what's going on without having
to think about it. It's up to you though.
Reviewed-by: Chase Douglas <chase.douglas at canonical.com>
More information about the xorg-devel
mailing list