[PATCH] [MMSystem.drv]: always create a thunk for MMIO objects
Eric Pouech
eric.pouech at orange.fr
Wed Jun 23 15:11:51 CDT 2010
partial fix for #23253
A+
---
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-patches
mailing list