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; };