Module: wine Branch: master Commit: 55fca7778bf593e4ddde583868ea514ae93edb11 URL: http://source.winehq.org/git/wine.git/?a=commit;h=55fca7778bf593e4ddde583868...
Author: Jörg Höhle hoehle@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);