X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fudev%2Fudev-builtin-input_id.c;h=1a1121ef940132681d212e00ae5d6fde7f4ad7d4;hp=4691fc073dda045b3982898459f87a3ec429fd88;hb=d6170d27b26eeeace966bb9720d66fcac2a6ef1b;hpb=9f6445e34a57c270f013c9416c123e56261553dd diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index 4691fc073..1a1121ef9 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -38,8 +38,6 @@ #define LONG(x) ((x)/BITS_PER_LONG) #define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wformat-nonliteral" /* * Read a capability attribute and return bitmask. * @param dev udev_device @@ -49,8 +47,7 @@ static void get_cap_mask(struct udev_device *dev, struct udev_device *pdev, const char* attr, unsigned long *bitmask, size_t bitmask_size, - bool test) -{ + bool test) { char text[4096]; unsigned i; char* word; @@ -59,7 +56,7 @@ static void get_cap_mask(struct udev_device *dev, snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr)); log_debug("%s raw kernel attribute: %s", attr, text); - memset (bitmask, 0, bitmask_size); + memzero(bitmask, bitmask_size); i = 0; while ((word = strrchr(text, ' ')) != NULL) { val = strtoul (word+1, NULL, 16); @@ -84,11 +81,13 @@ static void get_cap_mask(struct udev_device *dev, /* skip over leading zeros */ while (bitmask[val-1] == 0 && val > 0) --val; - for (i = 0; i < val; ++i) + for (i = 0; i < val; ++i) { + DISABLE_WARNING_FORMAT_NONLITERAL; log_debug(text, i * BITS_PER_LONG, bitmask[i]); + REENABLE_WARNING; + } } } -#pragma GCC diagnostic pop /* pointer devices */ static void test_pointers (struct udev_device *dev, @@ -96,8 +95,7 @@ static void test_pointers (struct udev_device *dev, const unsigned long* bitmask_abs, const unsigned long* bitmask_key, const unsigned long* bitmask_rel, - bool test) -{ + bool test) { int is_mouse = 0; int is_touchpad = 0; @@ -116,16 +114,27 @@ static void test_pointers (struct udev_device *dev, udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1"); else if (test_bit (BTN_TOOL_FINGER, bitmask_key) && !test_bit (BTN_TOOL_PEN, bitmask_key)) is_touchpad = 1; - else if (test_bit (BTN_TRIGGER, bitmask_key) || - test_bit (BTN_A, bitmask_key) || - test_bit (BTN_1, bitmask_key)) - udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); else if (test_bit (BTN_MOUSE, bitmask_key)) /* This path is taken by VMware's USB mouse, which has * absolute axes, but no touch/pressure button. */ is_mouse = 1; else if (test_bit (BTN_TOUCH, bitmask_key)) udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1"); + /* joysticks don't necessarily have to have buttons; e. g. + * rudders/pedals are joystick-like, but buttonless; they have + * other fancy axes */ + else if (test_bit (BTN_TRIGGER, bitmask_key) || + test_bit (BTN_A, bitmask_key) || + test_bit (BTN_1, bitmask_key) || + test_bit (ABS_RX, bitmask_abs) || + test_bit (ABS_RY, bitmask_abs) || + test_bit (ABS_RZ, bitmask_abs) || + test_bit (ABS_THROTTLE, bitmask_abs) || + test_bit (ABS_RUDDER, bitmask_abs) || + test_bit (ABS_WHEEL, bitmask_abs) || + test_bit (ABS_GAS, bitmask_abs) || + test_bit (ABS_BRAKE, bitmask_abs)) + udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); } if (test_bit (EV_REL, bitmask_ev) && @@ -143,8 +152,7 @@ static void test_pointers (struct udev_device *dev, static void test_key (struct udev_device *dev, const unsigned long* bitmask_ev, const unsigned long* bitmask_key, - bool test) -{ + bool test) { unsigned i; unsigned long found; unsigned long mask; @@ -182,8 +190,7 @@ static void test_key (struct udev_device *dev, udev_builtin_add_property(dev, test, "ID_INPUT_KEYBOARD", "1"); } -static int builtin_input_id(struct udev_device *dev, int argc, char *argv[], bool test) -{ +static int builtin_input_id(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev_device *pdev; unsigned long bitmask_ev[NBITS(EV_MAX)]; unsigned long bitmask_abs[NBITS(ABS_MAX)];