Fix device capability check

We now have a lot more bits to cater for, so let's use an array.

Broken with 487e66e64d

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer
2017-07-10 15:39:34 +10:00
committed by Benjamin Tissoires
parent 2c4cdc6dc6
commit df2a06690d
2 changed files with 9 additions and 4 deletions

View File

@@ -78,6 +78,8 @@ struct ratbag {
enum ratbag_log_priority log_priority;
};
#define MAX_CAP 1000
struct ratbag_device {
char *name;
void *userdata;
@@ -88,7 +90,7 @@ struct ratbag_device {
struct input_id ids;
struct ratbag_driver *driver;
struct ratbag *ratbag;
unsigned long capabilities;
unsigned long capabilities[NLONGS(MAX_CAP)];
unsigned num_profiles;
struct list profiles;

View File

@@ -808,17 +808,20 @@ void
ratbag_device_set_capability(struct ratbag_device *device,
enum ratbag_device_capability cap)
{
device->capabilities |= (1UL << cap);
if (cap == RATBAG_DEVICE_CAP_NONE || cap >= MAX_CAP)
abort();
long_set_bit(device->capabilities, cap);
}
LIBRATBAG_EXPORT int
ratbag_device_has_capability(const struct ratbag_device *device,
enum ratbag_device_capability cap)
{
if (cap == RATBAG_DEVICE_CAP_NONE)
if (cap == RATBAG_DEVICE_CAP_NONE || cap >= MAX_CAP)
abort();
return !!(device->capabilities & (1UL << cap));
return long_bit_is_set(device->capabilities, cap);
}
static inline enum ratbag_error_code