From 0cfca2b2d679124ed90c31381201c7c3a44eb4a5 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?J=C3=B6rg=20H=C3=B6hle?= Date: Sat, 3 Oct 2009 22:42:30 +0200 Subject: wineoss: Fix the buffer size check for more than 2 channels. originally 2002-06-28 commit d075eff2e912a1bad1aac92b9ae7416f9a59693f WAVE_FORMAT_EXTENSIBLE introduces other BlockAlign than 1, 2 or 4. --- dlls/wineoss.drv/audio.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dlls/wineoss.drv/audio.c b/dlls/wineoss.drv/audio.c index ddf973f..98575f1 100644 --- a/dlls/wineoss.drv/audio.c +++ b/dlls/wineoss.drv/audio.c @@ -2169,6 +2169,7 @@ static DWORD wodClose(WORD wDevID) */ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + WORD delta; TRACE("(%u, %p, %08X);\n", wDevID, lpWaveHdr, dwSize); /* first, do the sanity checks... */ @@ -2187,10 +2188,11 @@ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) lpWaveHdr->dwFlags |= WHDR_INQUEUE; lpWaveHdr->lpNext = 0; - if ((lpWaveHdr->dwBufferLength & (WOutDev[wDevID].waveFormat.Format.nBlockAlign - 1)) != 0) + delta = lpWaveHdr->dwBufferLength % WOutDev[wDevID].waveFormat.Format.nBlockAlign; + if (delta != 0) { WARN("WaveHdr length isn't a multiple of the PCM block size: %d %% %d\n",lpWaveHdr->dwBufferLength,WOutDev[wDevID].waveFormat.Format.nBlockAlign); - lpWaveHdr->dwBufferLength &= ~(WOutDev[wDevID].waveFormat.Format.nBlockAlign - 1); + lpWaveHdr->dwBufferLength -= delta; } OSS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_HEADER, (DWORD_PTR)lpWaveHdr, FALSE); -- 1.5.6.3