[PATCH 0/4] MR233: win32u: Partially move raw input APIs.

Zebediah Figura zfigura at codeweavers.com
Wed Jun 15 18:43:15 CDT 2022


On 6/14/22 00:02, Rémi Bernon (@rbernon) wrote:
> On Tue Jun 14 04:05:11 2022 +0000, **** wrote:
>> Zebediah Figura replied on the mailing list:
>> ```
>> On 6/13/22 03:27, Rémi Bernon (@rbernon) wrote:
>>> Rémi Bernon (@rbernon) commented about dlls/user32/tests/input.c:
>>>> +                ok(count == ~0u, "GetRawInputData returned %d\n", count);
>>>> +                ok(GetLastError() == ERROR_INVALID_PARAMETER,
>> "GetRawInputData returned %08lx\n", GetLastError());
>>>> +            }
>>>> +            else if (is_wow64)
>>>> +            {
>>>> +                count = GetRawInputData((HRAWINPUT)lparam,
>> RID_INPUT, &ri, &size, sizeof(RAWINPUTHEADER64));
>>>> +                todo_wine ok(count == sizeof(ri), "GetRawInputData
>> returned %d\n", count);
>>>> +                ok(ri.data.mouse.lLastX == 6, "Unexpected rawinput
>> data: %ld\n", ri.data.mouse.lLastX);
>>>> +                todo_wine ok(GetLastError() == 0xdeadbeef,
>> "GetRawInputData returned %08lx\n", GetLastError());
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                count = GetRawInputData((HRAWINPUT)lparam,
>> RID_INPUT, &ri, &size, sizeof(RAWINPUTHEADER64));
>>>> +                ok(count == ~0u, "GetRawInputData returned %d\n", count);
>>>> +                ok(GetLastError() == ERROR_INVALID_PARAMETER,
>> "GetRawInputData returned %08lx\n", GetLastError());
>>>> +            }
>>> It feels a bit unbalanced to test invalid cases at the same time as a
>> valid case depending on the arch. Could we have instead a test for the
>> invalid sizes, and the another one with valid size?
>> I don't understand what you mean by this. Only one of these three tests
>> makes sense, and on mutually exclusive architectures.
>> I could separate the if/elif/else into three separate if blocks, but I
>> doubt that's what you mean.
>> ```
> I mean that, like the `GetRawInputBuffer` tests below you check an invalid size and ERROR_INVALID_PARAMETER error case, but on wow64, you don't and instead you check a valid size and the returned data.
> 
> I think you should check the same cases on all arch if possible, so invalid size and error on all arch (similarly to `GetRawInputBuffer`), then the valid case and data on all arch as well.
> 

The point is to check the "wrong" architecture's size in all three 
cases. In the wow64 case, this succeeds; otherwise, it fails. This quirk 
is specific to GetRawInputData(); GetRawInputBuffer() always rejects the 
"wrong" architecture's size.

Perhaps this structure would make it clearer:

     if (sizeof(void *) == 8)
     {
         count = GetRawInputData(..., sizeof(RAWINPUTHEADER32));
         ok(count == ~0u, ...);
     }
     else
     {
         count = GetRawInputData(..., sizeof(RAWINPUTHEADER64));
         if (is_wow64)
         {
             ok(count == sizeof(ri), ...);
         }
         else
         {
             ok(count == ~0u, ...);
         }
     }



More information about the wine-devel mailing list