Jörg Höhle : wineoss: Fix the buffer size check for more than 2 channels.

Alexandre Julliard julliard at winehq.org
Mon Oct 5 09:54:30 CDT 2009


Module: wine
Branch: master
Commit: 55fca7778bf593e4ddde583868ea514ae93edb11
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=55fca7778bf593e4ddde583868ea514ae93edb11

Author: Jörg Höhle <hoehle at 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);




More information about the wine-cvs mailing list