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