[PATCH 7/8] winexinput.sys: Return native product strings on some devices.

Rémi Bernon rbernon at codeweavers.com
Mon Sep 6 16:08:55 CDT 2021


On 9/6/21 10:52 PM, Zebediah Figura wrote:
> On 9/6/21 1:34 PM, Rémi Bernon wrote:
>> On 9/6/21 7:06 PM, Zebediah Figura wrote:
>>> On 9/6/21 1:40 AM, Rémi Bernon wrote:
>>>> +    case IOCTL_HID_GET_STRING:
>>>> +        switch
>>>> ((ULONG_PTR)stack->Parameters.DeviceIoControl.Type3InputBuffer)
>>>> +        {
>>>> +        case HID_STRING_ID_IPRODUCT:
>>>> +            match_id = wcsrchr(impl->device_id, '\\') + 1;
>>>> +            for (i = 0; i < ARRAY_SIZE(device_strings); ++i)
>>>> +                if (!wcsicmp(device_strings[i].id, match_id))
>>>> +                    break;
>>>> +            if (i < ARRAY_SIZE(device_strings)) str =
>>>> device_strings[i].product;
>>>> +            break;
>>>
>>> Just a suggestion, really, but this might be cleaner as a helper 
>>> function?
>>>
>> Well, I don't plan on adding anything more there, so maybe it could be
>> split later if we need to.
> 
> I don't necessarily mean anything needs to be added, it's just that I 
> really don't like the "for followed by if" pattern that this exemplifies.
> 

Well, it's probably a matter of taste. I find this pattern

   for (it; it != end; ++it) { if (matching) break }
   if (it != end) { do something with it }

cleaner and more readable than the alternative that's often used:

   for (it; it != end; ++it)
   {
     if (matching)
     {
       do something with it
       break
     }
   }

especially when "do something with it" is long: the break may be easily 
missed.

Of course, a "find_xxx" helper could make it even clearer, but I think 
the former pattern can be read as an implicit "find xxx" pattern, 
especially for small loops.

Cheers
-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list