[PATCH 2/3] winepulse: Return offsets rather than ptrs to the strings.

Zebediah Figura zfigura at codeweavers.com
Thu Apr 14 16:03:55 CDT 2022


On 4/14/22 15:49, Huw Davies wrote:
> On Thu, Apr 14, 2022 at 02:38:29PM -0500, Andrew Eikum wrote:
>> On Thu, Apr 14, 2022 at 10:03:10AM +0100, Huw Davies wrote:
>>> --- a/dlls/winepulse.drv/mmdevdrv.c
>>> +++ b/dlls/winepulse.drv/mmdevdrv.c
>>> @@ -457,13 +457,16 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids_out, GUID **ke
>>>       }
>>>   
>>>       for (i = 0; i < params.num; i++) {
>>> -        unsigned int size = (wcslen(params.endpoints[i].name) + 1) * sizeof(WCHAR);
>>> +        WCHAR *name = (WCHAR *)((char *)params.endpoints + params.endpoints[i].name);
>>> +        char *pulse_name = (char *)params.endpoints + params.endpoints[i].pulse_name;
>>
>> It's unfortunate that we're losing type checking, both here and in the
>> "use handles" patch:
>>
>>> diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
>>> index 7b5ef7cfe39..96b8b28d1b5 100644
>>> --- a/dlls/winepulse.drv/mmdevdrv.c
>>> +++ b/dlls/winepulse.drv/mmdevdrv.c
>>> @@ -156,7 +156,7 @@ struct ACImpl {
>>>       UINT32 channel_count;
>>>       HANDLE timer;
>>>   
>>> -    struct pulse_stream *pulse_stream;
>>> +    unsigned int pulse_stream;
>>>   
>>>       AudioSession *session;
>>>       AudioSessionWrapper *session_wrapper;
>>
>> Is there any way we could get compile-time type checking back? Using
>> typedefs or something...?
> 
> Using something like "typedef unsigned int stream" is of course possible,
> but that doesn't get you any type checking.  I'd considered using HANDLE,
> but then almost every syscall will need a wow64 wrapper, so it didn't
> seem worth the extra complexity.
> 
> Likewise, the strings could be left as ptrs, but the wow64 wrapper
> for get_endpoint_ids is significantly more complicated.

One possibility that comes to mind is to define it as a fixed-size 
structure, e.g.

struct pulse_stream_handle
{
     unsigned int handle;
};



More information about the wine-devel mailing list