Dmitry Timoshkov : winmm: The buffer provided by an application is valid only in the mmioOpen( FOURCC_MEM) case.

Alexandre Julliard julliard at winehq.org
Fri Oct 10 08:06:35 CDT 2008


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

Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date:   Fri Oct 10 12:27:45 2008 +0900

winmm: The buffer provided by an application is valid only in the mmioOpen(FOURCC_MEM) case.

---

 dlls/winmm/mmio.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
index 42f1d32..4bad745 100644
--- a/dlls/winmm/mmio.c
+++ b/dlls/winmm/mmio.c
@@ -570,11 +570,8 @@ static MMRESULT MMIO_SetBuffer(WINE_MMIO* wm, void* pchBuffer, LONG cchBuffer,
 	wm->info.dwFlags &= ~MMIO_ALLOCBUF;
     }
 
-    wm->bBufferLoaded = FALSE;
-
     if (pchBuffer) {
         wm->info.pchBuffer = pchBuffer;
-        wm->bBufferLoaded = TRUE;
     } else if (cchBuffer) {
 	if (!(wm->info.pchBuffer = HeapAlloc(GetProcessHeap(), 0, cchBuffer)))
 	    return MMIOERR_OUTOFMEMORY;
@@ -588,6 +585,7 @@ static MMRESULT MMIO_SetBuffer(WINE_MMIO* wm, void* pchBuffer, LONG cchBuffer,
     wm->info.pchEndRead = wm->info.pchBuffer;
     wm->info.pchEndWrite = wm->info.pchBuffer + cchBuffer;
     wm->info.lBufOffset = wm->info.lDiskOffset;
+    wm->bBufferLoaded = FALSE;
 
     return MMSYSERR_NOERROR;
 }
@@ -669,6 +667,8 @@ HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags,
         refmminfo->wErrorRet = MMIO_SetBuffer(wm, refmminfo->pchBuffer, refmminfo->cchBuffer, 0);
 	if (refmminfo->wErrorRet != MMSYSERR_NOERROR)
 	    goto error1;
+	if (wm->info.fccIOProc == FOURCC_MEM)
+	    wm->bBufferLoaded = TRUE;
     }
 
     /* see mmioDosIOProc for that one */




More information about the wine-cvs mailing list