[PATCH v2] winebus.sys: Allow mapping of SDL controllers

Zebediah Figura z.figura12 at gmail.com
Fri Mar 15 09:47:26 CDT 2019


On 3/7/19 11:36 AM, Aric Stewart wrote:
 > +            ULONG index = 0;
 > +            KEY_VALUE_PARTIAL_INFORMATION *info;
 > +            DWORD length, result_len;
 > +            NTSTATUS status;
 > +
 > +            length = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + (1000 * 
sizeof(WCHAR));
 > +            info = HeapAlloc(GetProcessHeap(), 0, length);
 > +
 > +            do {
 > +                status = NtEnumerateValueKey(key, index, 
KeyValuePartialInformation,
 > +                                             info, length, &result_len);
 > +                if (status == STATUS_SUCCESS)
 > +                {
 > +                    CHAR mapping[1000] = {0};
 > +                    WideCharToMultiByte(CP_ACP, 0, info->Data,
 > +                        (info->DataLength / sizeof(WCHAR)), mapping, 
sizeof(mapping),
 > +                        NULL, NULL);
 > +                    if (mapping[0] != 0)
 > +                    {
 > +                        TRACE("Setting mapping 
%s\n",debugstr_a(mapping));
 > +                        pSDL_GameControllerAddMapping(mapping);
 > +                    } else {
 > +                        ERR("Failed to convert mapping 
%s\n",debugstr_w(info->Data));
 > +                    }
 > +                    index ++;
 > +                }
 > +            } while (status == STATUS_SUCCESS);
 > +            HeapFree(GetProcessHeap(), 0, info);
 > +            NtClose(key);

I have to imagine that these strings can be arbitrarily long, and so I'd 
think it would be better to dynamically reallocate the structure.

I still don't like the use of NT APIs here: just because a real native 
driver uses it doesn't mean we have to, and they're generally more 
complex and harder to read. Still, if you insist...



More information about the wine-devel mailing list