[PATCH 2/5] winebus.sys: Fix udev report descriptor length

Aric Stewart aric at codeweavers.com
Mon May 6 11:37:39 CDT 2019


Signed-off-by: Aric Stewart <aric at codeweavers.com>

On 5/6/19 8:46 AM, Andrew Eikum wrote:
> Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
> ---
>   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 e8e837a75c4..a2c72406cb7 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-devel mailing list