Eric Pouech : mmsystem.drv: Always create a thunk for MMIO objects.

Alexandre Julliard julliard at winehq.org
Thu Jun 24 11:15:20 CDT 2010


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

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Wed Jun 23 22:11:51 2010 +0200

mmsystem.drv: Always create a thunk for MMIO objects.

---

 dlls/mmsystem.dll16/mmio16.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/dlls/mmsystem.dll16/mmio16.c b/dlls/mmsystem.dll16/mmio16.c
index cc13583..ff55ce9 100644
--- a/dlls/mmsystem.dll16/mmio16.c
+++ b/dlls/mmsystem.dll16/mmio16.c
@@ -248,7 +248,7 @@ HMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo16,
 	memset(&mmioinfo, 0, sizeof(mmioinfo));
 
         EnterCriticalSection(&mmio_cs);
-        if (lpmmioinfo16->pIOProc && !(thunk = MMIO_AddThunk(lpmmioinfo16->pIOProc, lpmmioinfo16->pchBuffer)))
+        if (!(thunk = MMIO_AddThunk(lpmmioinfo16->pIOProc, lpmmioinfo16->pchBuffer)))
         {
             LeaveCriticalSection(&mmio_cs);
             return 0;
@@ -256,7 +256,7 @@ HMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo16,
 
 	mmioinfo.dwFlags     = lpmmioinfo16->dwFlags;
 	mmioinfo.fccIOProc   = lpmmioinfo16->fccIOProc;
-	mmioinfo.pIOProc     = (LPMMIOPROC)thunk;
+	mmioinfo.pIOProc     = lpmmioinfo16->pIOProc ? (LPMMIOPROC)thunk : 0;
 	mmioinfo.cchBuffer   = lpmmioinfo16->cchBuffer;
 	mmioinfo.pchBuffer   = MapSL((DWORD)lpmmioinfo16->pchBuffer);
         mmioinfo.adwInfo[0]  = lpmmioinfo16->adwInfo[0];
@@ -267,14 +267,19 @@ HMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo16,
 	mmioinfo.adwInfo[2]  = lpmmioinfo16->adwInfo[2];
 
 	ret = mmioOpenA(szFileName, &mmioinfo, dwOpenFlags);
-        if (thunk)
+        if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST)))
         {
-            if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST)))
-            {
-                thunk->pfn16 = NULL;
-                thunk->hMmio = NULL;
-            }
-            else thunk->hMmio = ret;
+            thunk->pfn16 = NULL;
+            thunk->hMmio = NULL;
+        }
+        else thunk->hMmio = ret;
+        if (ret && (dwOpenFlags & MMIO_ALLOCBUF))
+        {
+            MMIOINFO    m;
+            if (lpmmioinfo16->pchBuffer) FIXME("ooch\n");
+            /* FIXME: check whether mmioOpen should set pchBuffer */
+            mmioGetInfo(ret, &m, 0);
+            thunk->segbuffer = MapLS(m.pchBuffer);
         }
         LeaveCriticalSection(&mmio_cs);
 




More information about the wine-cvs mailing list