Andrew Eikum : winebus.sys: Fix udev report descriptor length.

Alexandre Julliard julliard at winehq.org
Mon May 6 15:38:49 CDT 2019


Module: wine
Branch: master
Commit: 277822b3843898ff26e5c90735d0afd5c297349e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=277822b3843898ff26e5c90735d0afd5c297349e

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon May  6 08:46:03 2019 -0500

winebus.sys: Fix udev report descriptor length.

Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winebus.sys/bus_udev.c | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index e8e837a..a2c7240 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -422,11 +422,6 @@ static BOOL build_report_descriptor(struct wine_input_private *ext, struct udev_
             abs_pages[ABS_TO_HID_MAP[i][0]][abs_pages[ABS_TO_HID_MAP[i][0]][0]] = i;
 
             ioctl(ext->base.device_fd, EVIOCGABS(i), &(ext->abs_map[i]));
-            if (abs_pages[ABS_TO_HID_MAP[i][0]][0] == 1)
-            {
-                descript_size += sizeof(REPORT_AXIS_HEADER);
-                descript_size += sizeof(REPORT_ABS_AXIS_TAIL);
-            }
         }
     /* Skip page 0, aka HID_USAGE_PAGE_UNDEFINED */
     for (i = 1; i < TOP_ABS_PAGE; i++)
@@ -441,6 +436,8 @@ static BOOL build_report_descriptor(struct wine_input_private *ext, struct udev_
             }
             abs_count++;
         }
+    descript_size += sizeof(REPORT_AXIS_HEADER) * abs_count;
+    descript_size += sizeof(REPORT_ABS_AXIS_TAIL) * abs_count;
 
     rel_count = 0;
     memset(rel_pages, 0, sizeof(rel_pages));
@@ -449,11 +446,6 @@ static BOOL build_report_descriptor(struct wine_input_private *ext, struct udev_
         {
             rel_pages[REL_TO_HID_MAP[i][0]][0]++;
             rel_pages[REL_TO_HID_MAP[i][0]][rel_pages[REL_TO_HID_MAP[i][0]][0]] = i;
-            if (rel_pages[REL_TO_HID_MAP[i][0]][0] == 1)
-            {
-                descript_size += sizeof(REPORT_AXIS_HEADER);
-                descript_size += sizeof(REPORT_REL_AXIS_TAIL);
-            }
         }
     /* Skip page 0, aka HID_USAGE_PAGE_UNDEFINED */
     for (i = 1; i < TOP_REL_PAGE; i++)
@@ -468,6 +460,8 @@ static BOOL build_report_descriptor(struct wine_input_private *ext, struct udev_
             }
             rel_count++;
         }
+    descript_size += sizeof(REPORT_AXIS_HEADER) * rel_count;
+    descript_size += sizeof(REPORT_REL_AXIS_TAIL) * rel_count;
 
     hat_count = 0;
     for (i = ABS_HAT0X; i <=ABS_HAT3X; i+=2)
@@ -479,6 +473,8 @@ static BOOL build_report_descriptor(struct wine_input_private *ext, struct udev_
             report_size++;
             hat_count++;
         }
+    if (hat_count > 0)
+        descript_size += sizeof(REPORT_HATSWITCH);
 
     TRACE("Report Descriptor will be %i bytes\n", descript_size);
     TRACE("Report will be %i bytes\n", report_size);




More information about the wine-cvs mailing list