From 5f35d35ad0f171dc0456d6806539df7bc67f8f1b Mon Sep 17 00:00:00 2001 From: Dmitry Kostjuchenko Date: Tue, 8 Dec 2020 08:26:54 +0200 Subject: [PATCH] Fixed breaking strict-aliasing rules (if compiled with GCC with -fstrict-aliasing) in PaWin_InitializeWaveFormatExtensible(). (#342) --- src/os/win/pa_win_waveformat.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/os/win/pa_win_waveformat.c b/src/os/win/pa_win_waveformat.c index bd5addd..5c6f29d 100644 --- a/src/os/win/pa_win_waveformat.c +++ b/src/os/win/pa_win_waveformat.c @@ -98,14 +98,15 @@ void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, waveFormatEx->wBitsPerSample = bytesPerSample * 8; waveFormatEx->cbSize = 22; - *((WORD*)&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE]) = - waveFormatEx->wBitsPerSample; + memcpy(&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE], + &waveFormatEx->wBitsPerSample, sizeof(WORD)); + + memcpy(&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK], + &channelMask, sizeof(DWORD)); - *((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask; - guid = pawin_ksDataFormatSubtypeGuidBase; guid.Data1 = (USHORT)waveFormatTag; - *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid; + memcpy(&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT], &guid, sizeof(GUID)); } PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ) -- 2.43.0