chiark / gitweb /
udev: place opening { at the same line as the function declaration
[elogind.git] / src / udev / udev-builtin-input_id.c
index 4691fc073dda045b3982898459f87a3ec429fd88..1a1121ef940132681d212e00ae5d6fde7f4ad7d4 100644 (file)
@@ -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)];