Jörg Höhle : wineoss: Fix the buffer size check for more than 2 channels.
Module: wine Branch: master Commit: 55fca7778bf593e4ddde583868ea514ae93edb11 URL: http://source.winehq.org/git/wine.git/?a=commit;h=55fca7778bf593e4ddde583868... Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Sat Oct 3 22:42:30 2009 +0200 wineoss: Fix the buffer size check for more than 2 channels. --- 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);
participants (1)
-
Alexandre Julliard