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

Rémi Bernon (@rbernon) wine at gitlab.winehq.org
Thu Jun 16 02:00:21 CDT 2022


On Wed Jun 15 23:43:22 2022 +0000, **** wrote:
> Zebediah Figura replied on the mailing list:
> ```
> 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, ...);
>          }
>      }
> ```
Yeah looks clearer.

-- 
https://gitlab.winehq.org/wine/wine/-/merge_requests/233#note_2178



More information about the wine-devel mailing list